Java将每行的末尾附加到文本文件

时间:2015-03-03 21:40:51

标签: java arrays

我想在现有文本文件的每一行末尾添加一些文本。每次我运行我的代码时,它都会删除所有内容,但不会在文件中写入/附加任何内容。 非常感谢任何帮助。

import java.io.*;

public class RandomNumber 
{
     public static void main(String[] args) {

         File dir = new File("C:\\testing");
         System.out.println(dir.isDirectory());


         try {
              File file = new File(dir, "Test.txt");
              FileReader fr = new FileReader(file);
              BufferedReader br = new BufferedReader(fr);
              FileWriter fw = new FileWriter(file);
              BufferedWriter bw = new BufferedWriter(fw);

              String s = "Add1,";
              String s2 = "Add2\n";
              String str;

              while((str = br.readLine()) != null) {
              StringBuffer sb = new StringBuffer(str);
              sb.append(s + s2);
              String y = sb.toString();
              System.out.println(sb);
              System.out.println("Appending");
              bw.write(y);
              }

              bw.close();
              System.out.println("Done");


         }catch(IOException e) {}

}
}

3 个答案:

答案 0 :(得分:3)

catch(IOException e) {}

不要使用空挡块。当出现异常时,您应该显示一条消息。

除非使用RandomAccessFile,否则无法读取和写入同一文件。

当您打开输出文件时,文件被清除,因此没有数据要读取,因此没有要写入的数据,因此结果是文件现在为空。

如果在“追加”模式下打开输出文件,则是,您可以读取文件中的数据(并且数据将保留在文件中),但所有写入语句都附加到原始文件的末尾,因此实际上,您现在可以获得文件中的数据副本。

相反,你的基本逻辑应该是:

  1. 从输入文件中读取一行
  2. 将文本写入输出文件
  3. 读完所有关闭这两个文件的数据后。
  4. 删除输入文件
  5. 将输出文件重命名为与输入文件相同的名称。

答案 1 :(得分:1)

我不确定您使用的Java版本是什么,但如果可以,我强烈建议您迁移到使用Streams的Java 8。这是一个很棒的函数式编程接口,可以删除大量的样板代码。 见Using Java 8, what is the most preferred and concise way of printing all the lines in a file?

谈论你想要实现的目标但是以功能性的方式。如果这会使你的方法变得复杂,请忽略我的建议,但我肯定会在将来研究Java 8及其FP构造,这使得编码在Java中变得更加优雅。

import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;


public class RandomNumber {

public static void main(String[] args) {

    Path path = Paths.get("c:/workspace", "testing.txt");

    String s = "Add1\n";
    try(BufferedWriter writer = Files.newBufferedWriter(path,StandardOpenOption.APPEND)) { 
        writer.write(s);
}
    } catch (IOException e) {
        e.printStackTrace();
    }

}

答案 2 :(得分:-1)

在添加后,您需要重新分配给字符串构建器。尝试将sb.append(s + s2)替换为sb = sb.append(s + s2)