gpt4 book ai didi

java - 使用 apache fileutil.copyfile 复制文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:40 24 4
gpt4 key购买 nike

我正在使用 apache util 将文件复制到目录,使用 fileutil.copyFile(src, dest)

我正在复制的文件由外部供应商每 2 秒更新一次,我真的不想锁定它(我的应用程序在 Windows 中运行——这会导致各种问题)。我希望有人可以帮助我建议在不锁定源文件的情况下复制甚至读取文件的最安全方法是什么?

亲切的问候

最佳答案

因为在复制操作之前您没有明确锁定整个文件,所以默认的 os 文件锁定机制正在工作。

我运行了一个快速测试程序,以查看在外部进程每 2 秒写入一次源文件时复制源文件时在 Windows 计算机上发生的情况。

写入文件的过程从未遇到过问题。

public static void main(String[] args) {
File f = new File("..\\test.txt");
long startTime = System.currentTimeMillis();
long elapsedTime = 0;
while (elapsedTime < 1000 * 60) {
try {
FileUtils.writeStringToFile(f, System.currentTimeMillis()+" : Data Write\r\n", true);
Thread.sleep(2000);
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex){
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
elapsedTime = System.currentTimeMillis() - startTime;
}
}

如果在源文件改变长度之前没有完成复制,复制文件的进程将抛出异常。看起来这个异常更多的是警告文件的复制版本不完整。当我同步时间以防止同时写入时从文件中读取时,未抛出此异常。

public static void main(String[] args) {
File f = new File("..\\test.txt");
long startTime = System.currentTimeMillis();
long elapsedTime = 0;
while (elapsedTime < 1000 * 60) {
try {
FileUtils.copyFile(f, new File("..\\test\\test.txt"));
Thread.sleep(2000);
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex){
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
elapsedTime = System.currentTimeMillis() - startTime;
}
}

基于这个测试,我不会担心写作过程会发生什么。当抛出 java.io.IOException: Failed to copy full contents from '..\test.txt' to '..\test\test.txt' 时,我会采取一些措施来处理这种情况。

关于java - 使用 apache fileutil.copyfile 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431141/

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