2013-04-26 21 views
0

我一直在編寫一個基於文本的RPG遊戲,並且我試圖實現一個保存遊戲功能。一切都被編碼並正常工作。在FileReader中跳過預定義的行

它的工作原理有一個名爲「SLIST」文件保存遊戲存檔和「會話ID號」名稱。每個遊戲都有一個文件。程序掃描該文件以查看是否存在保存文件,然後從中確定操作。

注:我知道這可以簡化很多,但要自己學習。

我遇到的問題是,我希望能夠在使用FileReader從文件讀取時跳過行。這樣用戶就可以相互共享文件了,我可以在文件頂部爲它們添加註釋(見下文)。

我試過使用Scanner.nextLine(),但它需要可以在文件中的任何位置插入某個字符,並讓它跳過字符後面的行(請參見下文)。

private static String currentDir = new File("").getAbsolutePath(); 
private static File sessionList= new File(currentDir + "\\saves\\slist.dat"); //file that contains a list of all save files 

private static void readSaveNames() throws FileNotFoundException { 

Scanner saveNameReader = new Scanner(new FileReader(sessionList)); 

int idTemp; 
String nameTemp; 

while (saveNameReader.hasNext()) { 

// if line in file contains #, skip the line 
nameTemp = saveNameReader.next(); 
idTemp = saveNameReader.nextInt(); 
saveNames.add(nameTemp); 
sessionIDs.add(idTemp); 
} 
saveNameReader.close(); 
} 

並將該文件是指會是這個樣子:

# ANY LINES WITH A # BEFORE THEM WILL BE IGNORED. 
# To manually add additional save files, 
# enter a new blank line and enter the 
# SaveName and the SessionID. 
# Example: ExampleGame 1234567890 
GenericGame 1234567890 
TestGame 0987654321 
#skipreadingme 8284929322 
JohnsGame 2718423422 

是有辦法做到這一點,否則我將不得不擺脫任何「意見」的文件中,並使用for循環跳過前5行?

回答

1

我的Java的有點生疏,但是......

while (saveNameReader.hasNext()) { 

    nameTemp = saveNameReader.next(); 

    // if line in file contains #, skip the line 
    if (nameTemp.startsWith("#")) 
    { 
    saveNameReader.nextLine(); 
    continue; 
    } 

    idTemp = saveNameReader.nextInt(); 
    saveNames.add(nameTemp); 
    sessionIDs.add(idTemp); 
} 
+0

直到你到達最後一個會話ID(2718423422)的作品。它讀取名稱,但不是ID號碼。 – Aaron 2013-04-26 23:09:22

+1

2718423422對於Java int來說太大,因此拋出了java.util.InputMismatchException錯誤。最大整數值是2147483647.您將需要使用多頭。 請參閱http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html對於Java原始類型限制 – 2013-04-26 23:31:28

+0

沒有捕捉到 - 我隨機輸入了10個數字。我改變了sessionID有9個數字,所以它不應該再遇到這個錯誤。 – Aaron 2013-04-26 23:40:13