【发布时间】:2012-09-18 21:22:10
【问题描述】:
我首先需要在远程 Ubuntu 机器上的目录中读取和写入文件。
首先,我编写了一个 Java 程序,它可以从远程 Windows 机器(即 LAN)上的共享文件夹中读取、写入文件。在这里,这样的东西可以在我的(本地)Windows 机器上运行:
File inputFile = new File(
"\\172.17.89.76\EBook PDF");/*ignore the syntax errors, the loc is just for the idea*/
现在当我考虑远程 Ubuntu 机器时,显然我不能做这样的事情,因为机器不在 LAN 上(我不确定即使它在 LAN 上是否可以这样做时间>!)。因此,我尝试了以下方法:
- 使用Jsch,在两台机器(本地-远程Linux,远程Linux-远程Linux)之间建立信任并使用sftp写入文件。(完成)
- 在两台机器上运行套接字 - 一个发送者,一个接收者(都是 Java)(完成)
- 尝试实现类似于 Windows (LAN) 机器的代码 sn-p 的 I/O(未实现)
在做所有这些的时候,我有很多疑问,阅读了很多帖子等,我觉得我在基础知识方面遗漏了一些东西:
- 实现 IO 需要某种类型的信任构建(两台机器之间)实用程序。但最后,我想编写一个类似于给定的 sn-p 的代码,而与机器、网络等无关。
- Jsch 解决方案和其他建议(通过 URL 使用 http、ftp 等)最终正在使用远程计算机上运行的一些服务。换句话说,并不是 Java IO 被用于访问远程文件系统——这对我没有吸引力,因为我依赖于服务而不是使用旧的 I/O。
- Samba,SSHFS 也出现在现场,只是让我更加困惑。但我不认为它们是我目标的解决方案!
重申一下,我想使用 Java I/O(plain 或 nio,两者都可以)编写代码,它可以简单地读取、写入远程文件,而无需使用 ftp、http 等协议上的服务或套接字发送者-接收者模型。我的期望有效吗?
- 如果不是,为什么以及我能做的最好的事情是读/写远程文件 使用 Java?
- 如果是,如何达到同样的效果!
P.S:如果我需要详细说明以准确提出我的问题,请发表评论!
【问题讨论】:
-
我不确定这会有所帮助,但你可以看看Apache VFS
-
Java 在某种程度上依赖于操作系统来执行 IO——即使是好的旧 IO 也使用这些——所以有点不清楚你的问题强调了什么。
-
@MadProgrammer 我检查了它,但我认为我的要求与文件“类型”无关;此外,它还支持通过我不想使用的 FTP、SFTP、HTTPS 等方式读取文件。谢谢和问候!
-
@Bhaskar 我想在 Machine1 上运行 Java 代码,它会创建一个指向 Machine2 上文件的 java.io.File 对象。一些可能性: 1. Machine1 和 Machine2 可以是 Windows-Linux、Windows-Windows、Linux-Linux 2. 可以在不同的网络上(不一定在 LAN 上)
-
我认为你最好的、开箱即用的解决方案,如果你不想在本地下载文件是某种网络共享,比如 smb