我在Windows中创建的Java程序使用PDF处理它(使用sejda FYI),然后将结果复制到网络共享。
我们所处的网络经常拥挤(我无法解决)因此在Java中,程序在复制文件时有时会抛出IOException
:An unexpected network error occurred
。
使用Windows资源管理器手动复制(小)文件可能需要永远,但最终会成功。 Windows资源管理器可以应对网络拥塞。
我调用的Java方法没有相同的能力在没有抛出IOException
的情况下在拥挤的网络上完成副本。
我已经考虑将copyFile
调用放入循环并运行它(延迟Thread.sleep()
)直到IOException
没有被抛出,直到所有文件被复制但是似乎不是一个好的解决方案。感觉非常蛮力。
相反,我正在考虑的是Windows可能最好地处理网络副本,所以我想使用JNA或Java Native Access来调用Windows来通过网络复制文件而不是依赖于内部Java方法(Java方法似乎无法无缝处理网络副本)。
我发现了两个优秀的Stackoverflow Q& As,用于解决Java中的复制问题(Copying files from one directory to another in Java,Standard concise way to copy a file in Java?),但它们并未解决使用本机文件复制例程的问题。我还发现JNA或Java Native Access会提供我正在寻找的内容,但不知道从哪里开始。
我想我可以调用Windows自己的副本并使用ProcessBuilder从命令行移动命令,但这也不是一个令人满意的解决方案。我的直觉告诉我JNA路线(或者在VB.Net中重写或重写,因为它不是一个特别复杂的程序)。
有趣的是,该项目引用了StackOverflow的帮助,但我在StackOverflow上找不到任何关于文件复制的内容:)。
FYI这是失败的代码片段。
try {
FileUtils.copyFile(FileUtils.getFile(oldFile), FileUtils.getFile(newFile));
} catch (IOException e) {
e.printStackTrace();
throw new IOException(e.getMessage() + " Try again. The network may be working against you.");
}