2011-08-16 94 views
-2

我需要從1 .txt文件中檢索兩行並將它們輸出到對話框。我以現在的代碼是閱讀特定行 - Java

private String getfirstItem() { 
    String info = ""; 
    File details = new File(myFile); 
    if(!details.exists()){ 
      try { 
       details.createNewFile(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     BufferedReader read = null; 
    try { 
     read = new BufferedReader (new FileReader(myFile)); 
    } catch (FileNotFoundException e3) { 
     e3.printStackTrace(); 
    } 

    for (int i = baseStartLine; i < baseStartLine + 1; i++) { 
        try { 
       info = read.readLine(); 
       } catch (IOException e) { 

        e.printStackTrace(); 
       } 
      } 
      firstItem = info;    
      try { 
       read.close(); 
     } catch (IOException e3) { 

      e3.printStackTrace(); 
     } 
      return firstItem; 
} 

private String getsecondItem() { 
    File details = new File(myFile); 
    String info = ""; 
    BufferedReader reader = null; 
    if(!details.exists()){ 
try { 
    details.createNewFile(); 
} catch (IOException e) { 
    e.printStackTrace(); 

}} 



try { 
reader = new BufferedReader (new FileReader(myFile)); 
} catch (FileNotFoundException e3) { 
    e3.printStackTrace(); 
    } 

for (int i = modelStartLine; i < modelStartLine + 1; i++) { 
      try { 
    info= reader.readLine(); 
      } catch (IOException e) { 
     e.printStackTrace();} 
     modelName = info;} try { 
      reader.close(); 
} catch (IOException e3) { 
    e3.printStackTrace(); 
    } 
return secondItem; 
} 

不過,我不斷收到兩個相同的值? modelStartLine = 1 and baseStartLine = 2

回答

2

你永遠不會真的跳過任何行。你從一個不同的數字開始你的循環索引,但是你仍然只從文件開始循環一次。你的循環應該是這個樣子:

public string readNthLine(string fileName, int lineNumber) { 
    // Omitted: try/catch blocks and error checking in general 
    // Open the file for reading etc. 

    ... 

    // Skip the first lineNumber - 1 lines 
    for (int i = 0; i < lineNumber - 1; i++) { 
     reader.readLine(); 
    } 

    // The next line to be read is the desired line 
    String retLine = reader.readLine(); 

    return retLine; 
} 

現在,你可以調用該函數是這樣的:

String firstItem = readNthLine(fileName, 1); 
String secondItem = readNthLine(fileName, 2); 

然而。因爲你只想文件的前兩行,你可以閱讀他們倆最初:

// Open the file and then... 
String firstItem = reader.readLine(); 
String secondItem = reader.readLine(); 
+0

非常感謝! – RayCharles

0

這是對的。你只用兩種方法讀取文件的第一行。當您創建一個新的Reader並使用readLine()方法讀取一行時,閱讀器將返回該文件的第一行。不管你的for循環中的數字如何。

for(int i = 0; i <= modelStartLine; i++) { 
    if(i == modelStartLine) { 
     info = reader.readLine(); 
    } else { 
     reader.readLine(); 
    } 
} 

這是一行讀取的簡單解決方案。

對於第一行,您不需要for循環。您可以創建閱讀器並調用readLine()方法。這返回第一行。