我想在现有文本文件的每一行末尾添加一些文本。每次我运行我的代码时,它都会删除所有内容,但不会在文件中写入/附加任何内容。 非常感谢任何帮助。
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) {}
}
}
答案 0 :(得分:3)
catch(IOException e) {}
不要使用空挡块。当出现异常时,您应该显示一条消息。
除非使用RandomAccessFile,否则无法读取和写入同一文件。
当您打开输出文件时,文件被清除,因此没有数据要读取,因此没有要写入的数据,因此结果是文件现在为空。
如果在“追加”模式下打开输出文件,则是,您可以读取文件中的数据(并且数据将保留在文件中),但所有写入语句都附加到原始文件的末尾,因此实际上,您现在可以获得文件中的数据副本。
相反,你的基本逻辑应该是:
答案 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)