2013-04-08 52 views
1

我想使用java来读取远程目录的内容。在java中使用ssh读取远程Ubuntu目录?

该目录位于运行Ubuntu的计算机上。右键点击该文件夹应该给共享文件夹选项和其安装的samba客户端的Windows共享,但我没有任何运行Windows的机器。

我在寻找一个java api库来访问远程目录的内容吗?

用户将只提供用户名,密码,IP和文件夹名称。

[//172.17.0.1/sharefolder/demo/]

感谢。

+0

我想在这里需要指定它是否用于标题和问题主体中的SFTP或SAMBA。 – 2013-04-08 21:19:08

回答

0

您可能会发现The Java CIFS Client Library具有您需要的API - 它对于服务器和客户端都很有用。

下面是从他们的文档检索文件中取出的一个示例:

import jcifs.smb.*; 

jcifs.Config.setProperty("jcifs.netbios.wins", "192.168.1.220"); 
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "username", "password"); 
SmbFileInputStream in = new SmbFileInputStream("smb://host/c/My Documents/somefile.txt", auth); 
byte[] b = new byte[8192]; 
int n; 
while((n = in.read(b)) > 0) { 
    System.out.write(b, 0, n); 
} 
+0

即使整个群集只是Ubuntu机器,JCIFS lib是否允许读取目录内容?其次,我们可以使用ssh在java中执行相同的过程吗? – 2013-04-08 11:05:56

+0

看来你想要一个基于sftp的API而不是SMB/CIFS。您应该编辑该问题以相应地反映该问题。无论如何,希望Menelaos会帮助你的答案。祝你好运! – Ahmed 2013-04-08 17:27:10

1

对于Samba共享: 即使Samba共享在linux使用相同的协议作为Windows共享文件。 因此,这里的帖子可以帮助:How can I mount a windows drive in Java? 基本上,您可以使用“net use”命令将共享位置挂载为网络驱动器。 你可以通过Windows控制台或java Process调用它。

对于SFTP位置:

如果没有与呼叫/使用外部命令可以使用sshfs的(任一出的java或通过处理)来挂载远程目录成一个问题本地文件夹。

参见:http://numberformat.wordpress.com/2010/03/01/how-to-mount-a-remote-ssh-filesystem-using-sshfs/

如果你想如何访问SFTP纯java,我读了一个名为JSch库可用于直接从Java访问SFTP。请参阅:

如果它是另一种类型的请注明

+0

感谢您的有用链接。但我正在寻找基于JAVA的API来传递用户和系统信息,然后访问该目录而无需安装。我创建了几个APi,如sshj,JCFS等,但他们都使用安全FTP [获取或放置]文件。 – 2013-04-08 11:47:36

+0

嗨,谢谢!问题,您使用的协议是SFTP,Samba还是其他协议? – 2013-04-08 11:49:46

+0

SFTP,我们可以遍历所有的文件和文件夹吗?检查,不管它是否是目录? – 2013-04-08 12:54:25