使用Java在Windows服务器之间复制文件?

时间:2010-10-01 14:11:35

标签: java

我正在寻找代码或库,我可以使用它在Windows服务器之间复制文件。想象一下运行后台线程的主服务器,这样无论何时完成事务,它都会将数据库文件备份到备份服务器。 (这是必需的协议,因此无需讨论此操作的优缺点)。换句话说,事务完成后,会执行Java代码,将一个目录复制到备份服务器。

Windows机器的设置方式,主服务器将备份服务器的C:驱动器映射为它自己的Z:驱动器。这两台机器都运行Windows 2003或2008 Server。 Java 1.6。

3 个答案:

答案 0 :(得分:1)

在另一个论坛上找到正确的答案,并在设置上稍微搞清楚。在Windows中将文件从一台计算机复制到另一台计算机(使用.bat文件或使用直接的Java代码)的问题是用户权限。在主服务器上,您必须使用该管理员的用户名和密码将Tomcat进程设置为以管理员身份运行。 (右键单击Tomcat服务,选择“登录”选项卡,输入管理员的用户名/密码)。 Tomcat运行的默认用户(本地用户)不足以在Windows上的网络驱动器之间复制文件。当我正确设置时,我在本文之前尝试过的.bat文件解决方案,以及这里提出的直接Java解决方案都运行正常。

希望能帮助别人,并感谢您的建议。

答案 1 :(得分:0)

通过File#listFiles()从一个磁盘上的目录获取文件,遍历每个文件,在另一个磁盘上创建一个新的File,从文件中的FileInputStream读取一个磁盘并将其写入另一个磁盘上的文件FileOutputStream

坚果:

for (File file : new File("C:/path/to/files").listFiles()) {
    if (!file.isDirectory()) {
        File destination = new File("Z:/path/to/files", file.getName());
        // Do the usual read InputStream, write OutputStream job here.
    }
}

另见:


顺便说一句,如果您使用的是Java 7,那么您可以使用Path#copyTo()

Paths.get("C:/path/to/files").copyTo(Paths.get("Z:/path/to/files"));

答案 2 :(得分:0)

我真的建议使用Apache Commons IO

FileUtils类提供了迭代目录并将文件从一个目录复制到另一个目录的方法。您不必担心自己阅读和编写文件,因为这些都是由图书馆为您完成的。