【问题标题】:Java - read file from stream from the endJava - 从最后的流中读取文件
【发布时间】:2013-09-29 09:53:54
【问题描述】:

我想知道是否有一种方法可以从 FTP 服务器的末尾逐行读取文本文件。我需要读取大文件,而且我只对最后几行感兴趣。

我可以使用以下问题的代码从我的 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)。 但我不想下载这个文件,因为它可能非常大,就像我写的那样。

有人知道另一种方法吗?

【问题讨论】:

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

标签: java ftp stream readfile


【解决方案1】:

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

【讨论】:

  • 谢谢。在大文件的情况下,什么会更好,更有效:您的解决方案或将文件保存在磁盘上并读取最后(几行)行?
  • 此解决方案更快,因为您跳过了一步 - 将文件保存在磁盘上。其余的过程是相同的 - 只需使用从 ftp 服务器获得的输入流而不是本地文件:
  • 当我将文件保存在磁盘上时,我可以使用代码从末尾读取它,而无需从头开始读取每一行,正如我所写的那样,使用来自 stackoverflow.com/questions/686231/… 的 Eric Leschinski 代码。
  • 此解决方案更快,因为您跳过了一步 - 将文件保存在磁盘上。其余过程相同 - 只需使用从 ftp 服务器获取的输入流而不是本地文件:BufferedReader in = new BufferedReader(ftpStream); ... in.readLine();
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2017-11-12
    • 2015-07-25
    • 1970-01-01
    • 2012-05-03
    • 2019-04-29
    • 2022-11-02
    • 2013-07-16
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多