2012-11-01 23 views
0

我想從文本文件中讀取並使用輸入來創建多個不同的對象。我顯然不希望在文件爲空後繼續閱讀,所以我有一個方法isEmpty(),它讀取直到我想要的文件中的點,然後讀取下一行並測試null。在java中檢查EOF和跳過行

問題是,如果它不是空的,它會繼續讀取文件...但是從下一行開始。換句話說,我讀了要測試的第一行,但不能再讀一遍。

我目前的想法是創建一個虛擬對象來測試它,並使用相同的第二個對象來實際使用。但是,這看起來有點浪費,我認爲必須有更好的方式......感謝所有人!

備註: 讀取的方法與檢查空白的方法不同。 在整個對象的方法中使用了相同的bufferedReader,否則我需要再次請求用戶輸入文件名,這是我不想做的。

+0

inb4 use Scanner(File filename) 'while(scan.hasNext()){ String str = scan.next(); makeSandwich(str); }' –

回答

0

你爲什麼不堅持到BufferedReader成語?而不是詢問文件是否爲空,如果下一個文件不爲空,則直接詢問下一個項目,如果沒有項目,則返回null。簡單得多:

while ((line = reader.readLine()) != null) { 
    ... 
} 

否則,你可以使用mark()標記您的當前位置,預讀幾行,然後reset()回到你的商標。

+0

我不能做你說的第一件事,因爲我需要做這個檢查作爲一個單獨的方法從read()方法,因爲其他的東西......但第二個想法是一個好主意,聽起來像。我必須嘗試在網上找到這些方法的一些示例......謝謝! –

+0

我的理解(儘管我可能是錯的)是文件中存儲了多個東西,並且有一個函數可以單獨讀取每個文件,如果之後文件爲空,就會丟棄文件。該文件不會每次都讀到最後。 – Krease

+0

isEmpty的一個用途是讓程序知道不要讀取並創建一個新對象(如果沒有這個,它會開始在所有字段中使用null創建對象) –

0

我想你可能想要使用RandomAccessFile,這有支持跳過功能,並且能夠向後移動。

你可能有興趣在使用以下方法:

void seek(long pos) 
    int skipBytes(int n) 
    String readLine() 
+0

也許我可以...我必須瞭解更多關於此的信息? –

+0

我打算說「這個。」 –