2015-07-13 156 views
2

如何使用FileWriter和PrintWriter在文本文件中的特定行上书写?我不想每次都要创建一个新文件。如何使用Java替换文件中的特定行?

编辑:我可以在文件中循环,在指定的行号处获取字符串的长度,然后使用该长度在我到达该行时退格(删除字符串),然后写入新数据?

public static void setVariable(int lineNumber, String data) { 
    try { 
     // Creates FileWriter. Append is on. 
     FileWriter fw = new FileWriter("data.txt", true);  

     PrintWriter pw = new PrintWriter(fw);  

     //cycles through file until line designated to be rewritten is reached 
     for (int i = 1; i <= lineNumber; i++) {  
      //TODO: need to figure out how to change the append to false to overwrite data 
      if (i == lineNumber) { 
       pw.println(data); 
       pw.close(); 
      } else {   
       // moves printwriter focus to next line (doesn't overwrite) 
       pw.println(""); 
      } 
     } 
    } 
} 
+0

也许这个答案会有帮助? http://stackoverflow.com/a/6477893/1797341 –

回答

2

如果您使用的是Java 7或更高版本,如果lineNumber开始于1,你可以做到以下几点:

public static void setVariable(int lineNumber, String data) throws IOException { 
    Path path = Paths.get("data.txt"); 
    List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8); 
    lines.set(lineNumber - 1, data); 
    Files.write(path, lines, StandardCharsets.UTF_8); 
} 

显然,如果lineNumber开始于0,则:

lines.set(lineNumber, data); 
+0

这将工作与任何线?例如。我在文件中有90行,我想写在第34位。 –

+0

你好,@TelleMiller :) * Yup *。它应该工作。 –

+0

我是否导入java.awt.List或java.util.List? –

相关问题