2016-04-28 66 views
0

我想通过Java编辑现有的文件,在行的每个第4个字符后面都有一个换行符,后跟一个空格。所以下面是期望值。Java编辑现有文件

File Content 
------------ 
abcdef 
gh 
ijklmn 

Expected output 
-------------- 
abcd 
ef 
gh 
ijkl 
mn 

下面是已尝试的代码,但是这将全部写入一行。

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=line.replaceAll("(.{4})", "$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); 

    } 
+0

您对此代码有什么问题? – Sanjeev

+0

@Sanjeev根据问题''但这写在一个单一的所有行'# –

+0

如果您使用'“$ 1”+ System.getProperty(“line.separator”);'而不是'“$ 1 \ n”? – npinti

回答

1

您的代码在每行之后没有写行分隔符。您需要特别添加它

 while ((line = br.readLine()) != null) {  
      line=line.replaceAll("(.{4})", "$1\n ");  
      bw.write(line); 
      bw.newLine(); 
    } 
+2

或'bw.newLine();' –

+0

同意。谢谢,这将是系统独立的。 – Sanjeev