2013-09-24 143 views
1

我不知道是否有办法从FTP服务器的末尾逐行读取文本文件。我需要阅读大文件,而且我只对最后几行感兴趣。Java - 从尾端流读取文件

我能够从我的HD上的文件中读取最后一行,并带有这个问题的代码:Quickly read the last line of a text file?,我也可以从FTP服务器上逐行读取文件:Java. Read file from FTP but DON'T download it whole

但是在第一种情况下,函数tail使用变量类型File,而第二种代码使用变量类型InputStream。

当我在寻找转换文件的方式时,我发现只有真正的方法是将内容下载到tmp文件(How to convert InputStream to virtual File)。 但我不想下载这个文件,因为它可能会非常大,正如我写的。

有没有人知道另一种方式来做到这一点?

+0

我不认为我们可以从FTP服务器的最后一行开始读取文件。你必须先下载文件。 –

回答

1

这是不可能的。但是您可以逐行阅读输入流,并记住仅有的最后几行。如果下一行出现,就忘记第一条读取行。

+0

谢谢。在大文件的情况下,什么会更好,更高效:您的解决方案还是将文件保存在磁盘上并读取最后几行? – Line

+0

当您跳过一步时,此解决方案速度更快 - 将文件保存在磁盘上。其余的过程是相同的 - 只需使用从ftp服务器获取的输入流而不是本地文件: – agad

+0

当我将文件保存在磁盘上时,我可以使用代码从头读取它,而无需从头开始读取每行, Eric Leschinski代码来自http://stackoverflow.com/questions/686231/java-quickly-read-the-last-line-of-a-text-file,正如我写的问题。 – Line

1

使用FTP协议是不可能的。该协议仅支持从头开始读取文件。 (有一个可选功能,允许中途传输重新启动一半,但它取决于服务器发送不透明的“标记”代表可能的恢复点。我看不出如何使用它来跳过到一个结束任意文件)。

如果您正在寻找替代品,请考虑使用HTTP与HEAD请求的组合,以及使用带有Range标头的GET请求。 (这取决于服务器识别这些请求...)