使用带有网络路径或驱动器的 Java 将文件写入远程位置?

Posted

技术标签:

【中文标题】使用带有网络路径或驱动器的 Java 将文件写入远程位置?【英文标题】:Write a file to a remote location using Java with network path or drive? 【发布时间】:2013-08-15 03:11:55 【问题描述】:

我使用 Windows 共享在我的服务器上共享了一个文件夹。在另一台运行我的代码的计算机上,我已经映射了一个指向该文件夹的网络驱动器。

在我的代码中,我不时地将文件从本地计算机传输到服务器。像这样的:

File srcFile = new File("C:\\test.mpg");
File destFile = new File(...);

// error checking
FileUtils.moveFile(srcFile, destFile);

对于destFile,我应该使用哪种方法?我目前的做法:

File destFile = new File("Z:\\folder\\test.mpg");

或使用网络路径:

File destFile = new File("\\192.168.123.123\\folder\\test.mpg");

我问这个是因为最近我遇到了文件传输失败的情况,因为我的程序由于未登录而无法写入我的网络驱动器,我必须手动转到驱动器并输入我的凭据并启用“保持联系”选项。

【问题讨论】:

【参考方案1】:

您可以等效地使用映射驱动器或完整网络路径; Java 不在乎,只是将文件名传递给操作系统。请注意,如果您使用的是网络路径,则需要以\\\\ 开头。

【讨论】:

windows服务(如tomcat服务)可以使用映射的驱动程序吗?【参考方案2】:

您可以使用 JCIFS 库以 Java 访问 Windows SMB 共享。使用它,您可以执行以下操作:

String smbUrl = "smb://username:password@server/share/file";
SmbFileOutputStream fos = new SmbFileOutputStream(new SmbFile(smbURL));

【讨论】:

如果你有域,那么你必须像 domain;user:password 一样使用它,例如 String smbUrl = "smb://domain;username:password@server/share/file"; 但是我们将如何将文件从源移动到目标?我认为您的代码告诉我们连接受密码保护的文件夹,但如何将文件移动到该文件夹​​,因为 FileUutils.moveFile() 只接受文件类型的参数而不是 SmbFile

以上是关于使用带有网络路径或驱动器的 Java 将文件写入远程位置?的主要内容,如果未能解决你的问题,请参考以下文章

在 OSX 上使用 python 将文件复制到网络路径或驱动器

sh 使用find with print0安全地将带有任何合法字符的文件名或文件路径写入数组并迭代它们。

将 Java 连接到网络驱动器上的 Access DB

用于在硬盘中创建文本文件的 html 或 java 脚本代码

如何授予在磁盘或映射驱动器上写入的权限

PHP 无法将上传的文件移动(写入)到挂载的网络驱动器