У меня есть класс, который копирует один файл из одной папки в другую:Получить позицию в канале файла
public class Foo extends JFrame{
Timer t;
FileChannel inp = null,
outp= null;
File sourceFile = new File("C:/movies/movie.mkv"),
destFile = new File("C:/test/movie.mkv");
long rec = 0;
long size;
LayoutManager manager = new MigLayout();
public void createUI(){
JPanel panel = new JPanel();
JButton copyFile = new JButton("Copy file");
JButton btn = new JButton("Start function");
JButton stop = new JButton("Stop function");
panel.setLayout(manager);
panel.add(btn);
panel.add(copyFile,"wrap");
panel.add(stop);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setContentPane(panel);
this.setVisible(true);
this.setSize(400,400);
this.pack();
btn.addActionListener((e)->{
try {
inp = new FileInputStream(sourceFile).getChannel();
outp = new FileOutputStream(destFile).getChannel();
size = inp.size();
outp.transferFrom(inp,0,size);
} catch (Exception e2) {
// TODO Auto-generated catch block
System.out.println("FIle not found");
return;
}
t = new Timer(100,i->{
try {
rec = outp.position();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
rec = 0;
}
finally{
System.out.println("Position in file:"+rec);
}
});
t.start();
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(()->new Foo().createUI());
}
}
Теперь у меня есть таймер Swing, что каждые 100 мс выводит на позицию в файле.
То, что я на самом деле пытаюсь сделать, это дать пользователю знать, сколько из файла было скопировано. Проблема в том, что каждые 100 мс число, которое выводится на моей консоли, это «Позиция в файле: 126089692».
Я хотел бы получить объяснение если возможно.
Спасибо за ваше время
я попробовал, но был один и тот же результат –