2016-08-01 53 views
1

我一直堅持這一段時間,終於決定請求幫助。 所以我有一個小文本文件,用戶想要從它切換2行,用戶輸入2行的索引,我必須切換EM。 到目前爲止我的想法是要麼使用replaceALL與2正則表達式 ,但答:這可能不會切換它們,但只是最終取代一個與另一個,留給我一個副本和乙:我不知道如何使用正則表達式找到第n行; 或使用 - Files.readAllLines(Paths.get(name))。get(index);爲了得到兩條線,但是我仍然在爲實際的切換過程而努力。在Java文本文件中切換兩行

+0

它需要使用大型文件嗎? – 4castle

回答

1

您可以使用

  • Files.readAllLines得到所有行作爲一個列表
  • 交換名單的兩個元素。例如Collections.swap
  • 寫回所有行以更新文件。

如果您需要能夠處理大型文件的工作,你可以

  • 使用RandomAccessFile中找到你需要從文件開始讀取線的開始/結束。
  • 將兩行讀入緩衝區。
  • 將兩行寫在原地,但換了一下。
+0

謝謝,我會稍後再試。 – igrilkul

+1

工作就像一個魅力,謝謝 – igrilkul

0

如果你正在處理大文件,並且需要節省內存,你可以這樣做(不過,如果第二互換額度接近文件的末尾,可能需要更長的時間):

File myFile = new File(somePath); 
File outputFile = new File(someOtherPath);//this is where the new version will be stored 
BufferedReader in = new BufferedReader(new FileReader(myFile)); 
PrintWriter out = new PrintWriter(outputFile); 
String line; 
String swapLine;//first line to swap 
int index = -1;//so that the first line will have an index of 0 

while((line = in.readLine()) != null){ 
    index++; 
    if(index == firstIndex){//if this line is the first line to swap 
     swapLine = line;//store the first swap line for later 
     //Create a new reader. This one will read until it finds the second swap line. 
     BufferedReader in2 = new BufferedReader(new FileReader(myFile)); 
     int index2 = -1; 
     while(index2 != secondIndex){ 
      index2++; 
      line = in.readLine(); 
     } 
     //The while loop will terminate once line is equal to the second swap line 
    }else if(index == secondIndex)//if this line is the second swap line{ 
     line = swapLine; 
     //this way the PrintWriter will write the first swap line instead of the second 
    } 
    out.println(line); 
} 

你可以,當然,編程方式刪除myFile和重命名outputFile到任何myFile被評爲磁盤算賬:

myFile.delete(); 
outputFile.renameTo(myFile); 

我相信這個工作,但我沒有測試它。