从远程ftp服务器提取文件内容,无需写入本地磁盘中的文件

时间:2013-02-18 19:50:10

标签: java ftp sftp apache-tika

使用java以编程方式建立与远程ftpsftp服务器的连接后,无需写入本地系统中的文件即可读取/home/www-data/content/的文件。基本上我想从该路径中使用Apache Tika提取文件的元数据而不下载。

更新:

我尝试与JSch建立联系,这是SSH2的实现。

JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();

2 个答案:

答案 0 :(得分:1)

对于使用JSCH库的SFTP,您应该使用ChannelSFTP.get()方法并提供不写入磁盘的OutputStream实例(例如,ByteArrayOutputStream)。请参阅此处的JSCH股票示例:

http://www.jcraft.com/jsch/examples/Sftp.java.html

JavaDoc for get()方法:

http://epaul.github.com/jsch-documentation/javadoc/com/jcraft/jsch/ChannelSftp.html#get(java.lang.String,java.io.OutputStream,com.jcraft.jsch.SftpProgressMonitor,int,long)

对于FTP,您必须使用其他东西,因为JSCH仅支持SFTP协议。

答案 1 :(得分:1)

您可能想要试用Apache Commons VFS(虚拟文件系统)。

他们有一个相当不错的example of a simple SFTP file download,但在你的情况下你可以改变该例子的process()方法并让它用TIKA解析文件。

使用commons vfs,您可以使用FileObject。在FileObject上,您可以调用doGetInputStream(),然后您可以将其移交给TIKA进行进一步处理。