所以这可能是也可能不是一个愚蠢的问题,但我们走了!
所以我正在尝试写入一个文件并且它不会覆盖但是它会一遍又一遍地写,所以我需要帮助。
方法:
@SuppressWarnings("resource")
public static void writeFile(File file, String index) {
try {
boolean wri = false;
PrintWriter out = new PrintWriter(new FileWriter(file, true));
Scanner scanner = new Scanner(file);
while(scanner.hasNext()) {
String str = scanner.nextLine();
if(str.equals(index)) {
System.out.println(index);
scanner.close();
wri = true;
break;
} else {
wri = false;
break;
}
}
if(wri != false)
return;
out.write(index);
out.write("\n");
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
你的代码充满了错误。
不要将hasNext()
与nextLine()
一起使用。请改用hasNextLine()
。
如果找不到scanner
,您就不会关闭index
。
如果找到out
,您就不会关闭index
。
即使您不需要写任何内容,也可以打开文件进行写作。
您可以忽略例外情况。
if(wri != false)
是一种非常模糊的方式来撰写if (wri)
。
如果您仅使用FileWriter
方法,则无需在PrintWriter
中包裹write()
。
由于您在append
模式下明确调用FileWriter
constructor,我假设您要将index
写入文件,当且仅当文件尚未包含时那个文字。
请注意,如果index
包含换行符,您的逻辑将无效。
由于您只是阅读行,因此您应该使用BufferedReader
而不是Scanner
,因为Scanner
的开销非常大。
至于您没有关闭资源,请使用try-with-resources。
您的代码应该是这样的:
public static void writeFile(File file, String index) {
if (file.exists()) {
try (BufferedReader in = new BufferedReader(new FileReader(file))) {
for (String line; (line = in.readLine()) != null; )
if (line.equals(index))
return;
} catch (Exception e) {
throw new RuntimeException("Error reading file: " + file, e);
}
}
try (FileWriter out = new FileWriter(file, true)) {
out.write(index);
out.write(System.lineSeparator());
} catch (Exception e) {
throw new RuntimeException("Error appending to file: " + file, e);
}
}
测试
File file = new File("C:/temp/test.txt");
writeFile(file, "Hello");
writeFile(file, "World");
writeFile(file, "Hello");
文件内容
Hello
World
答案 1 :(得分:-1)
尝试使用 false
PrintWriter out = new PrintWriter(new FileWriter(file, false));