2013-09-24 40 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請求。 (這取決於服務器識別這些請求...)