2016-04-27 70 views
2

我試圖從現有文件的每行第100個字符處引入一個換行符,但它不會寫入任何內容。下面是用java編寫的代碼,用於讀取現有文件並用臨時文件寫入它。從Java讀取並編輯文件

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class ReplaceFileContents { 
    public static void main(String[] args) { 
    new ReplaceFileContents().replace(); 
    } 

    public void replace() { 
     String oldFileName = "Changed1.ldif"; 
     String tmpFileName = "Changed2.ldif"; 

     BufferedReader br = null; 
     BufferedWriter bw = null; 
     try { 
     br = new BufferedReader(new FileReader(oldFileName)); 
     bw = new BufferedWriter(new FileWriter(tmpFileName)); 
     String line; 
     while ((line = br.readLine()) != null) {  
       line.replaceAll("(.{100})", "$1\n");  
     } 
     } catch (Exception e) { 
     return; 
     } finally { 
     try { 
      if(br != null) 
       br.close(); 
     } catch (IOException e) { 
      // 
     } 
     try { 
      if(bw != null) 
       bw.close(); 
     } catch (IOException e) { 
      // 
     } 
     } 
     // Once everything is complete, delete old file.. 
     File oldFile = new File(oldFileName); 
     oldFile.delete(); 

     // And rename tmp file's name to old file name 
     File newFile = new File(tmpFileName); 
     newFile.renameTo(oldFile); 

    } 
} 
+1

請勿沉默'例外'!嘗試在控制檯上輸出它們。 – ortis

+5

你不是寫信給'bw'的任何地方 –

+0

而不是逐行讀取和處理文件,爲什麼不一次只讀一個字節,同時跟蹤消耗的字節數,一旦計數達到100就追加一個新行。 –

回答

7
while ((line = br.readLine()) != null) {  
    line.replaceAll("(.{100})", "$1\n");  
} 

首先,line.replaceAll不與結果替換你的行變量。因爲Strings是不可變的,所以這個方法返回新的字符串,所以你的行應該是line = line.replaceAll(...

其次,你永遠不會將新的String寫回到文件中。使用replaceAll不會以任何方式更改文件本身。請嘗試使用您的bw對象將新的String寫入同一行。

+0

感謝它寫道。但是我真正期望的是在第四個字符之後有一個換行符。 輸入 ----- ABCDEF GH ijklmn 輸出 ------ ABCD EF GH IJKL MN 但上述代碼寫入所有在一個單一的線路。 – user1650864

+0

'BufferedReader.read'將一次讀取一個字符。 'BufferedWriter.write'將在寫入之後不會新建一行。 – Zircon

1

從您在這裏發表的內容中,您永遠不會嘗試寫line返回到bw。試試這個:

package hello; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

public class Test { 
    public static void main(String[] args) { 
     new Test().replace(); 
    } 

    public void replace() { 
     String oldFileName = "d:\\1.txt"; 
     String tmpFileName = "d:\\2.txt"; 

     BufferedReader br = null; 
     BufferedWriter bw = null; 
     try { 
      br = new BufferedReader(new FileReader(oldFileName)); 
      bw = new BufferedWriter(new FileWriter(tmpFileName)); 
      String line; 
      while ((line = br.readLine()) != null) { 
       line = line.replaceAll("(.{100})", "$1\n"); 
       bw.write(line); 
      } 
     } catch (Exception e) { 
      return; 
     } finally { 
      try { 
       if(br != null) 
        br.close(); 
      } catch (IOException e) { 
       // 
      } 
      try { 
       if(bw != null) 
        bw.close(); 
      } catch (IOException e) { 
       // 
      } 
     } 
     // Once everything is complete, delete old file.. 
     File oldFile = new File(oldFileName); 
     oldFile.delete(); 

     // And rename tmp file's name to old file name 
     File newFile = new File(tmpFileName); 
     newFile.renameTo(oldFile); 

    } 
} 
  1. 你沒有嘗試過寫行回bw;
  2. String#replaceAll將返回源的副本不是原始的String;