在Java中执行本机Windows文件复制和移动操作

时间:2017-01-13 09:25:47

标签: java jna file-copying

我在Windows中创建的Java程序使用PDF处理它(使用sejda FYI),然后将结果复制到网络共享。

我们所处的网络经常拥挤(我无法解决)因此在Java中,程序在复制文件时有时会抛出IOExceptionAn 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 JavaStandard 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.");
    }

0 个答案:

没有答案