gpt4 book ai didi

java - 获取文件 channel 的位置

转载 作者:行者123 更新时间:2023-12-01 09:27:02 25 4
gpt4 key购买 nike

我有一类将一个文件从一个文件夹复制到另一个文件夹:

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”。

如果可能的话,我想要一个解释。

感谢您的宝贵时间

最佳答案

我在 https://docs.oracle.com/javase/8/docs/api/ 中找到:

public abstract long transferFrom(ReadableByteChannel src,
long position,
long count)
throws IOException-

“...此方法不会修改该 channel 的位置...”

也许这就是为什么你看到相同的值(我没有检查它)。

尝试替换:

 rec = outp.position();

rec = inp.position();

关于java - 获取文件 channel 的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39752489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com