写入文件问题
Writing to files issue
所以这可能是也可能不是一个愚蠢的问题,但我们开始吧!
所以我正在尝试写入一个文件,它没有覆盖但它一遍又一遍地写入,所以我需要帮助。
方法:
@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();
}
}
尝试 false
PrintWriter out = new PrintWriter(new FileWriter(file, false));
您的代码充满错误。
不要将 hasNext()
与 nextLine()
一起使用。请改用 hasNextLine()
。
如果找不到 index
,请不要关闭 scanner
。
如果找到 index
,请不要关闭 out
。
您打开文件进行写入,即使您不需要写入任何内容。
你忽略异常。
if(wri != false)
是一种很晦涩的写法if (wri)
.
如果您只使用 write()
方法,则无需将 FileWriter
包装在 PrintWriter
中。
由于您在 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
所以这可能是也可能不是一个愚蠢的问题,但我们开始吧!
所以我正在尝试写入一个文件,它没有覆盖但它一遍又一遍地写入,所以我需要帮助。
方法:
@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();
}
}
尝试 false
PrintWriter out = new PrintWriter(new FileWriter(file, false));
您的代码充满错误。
不要将
hasNext()
与nextLine()
一起使用。请改用hasNextLine()
。如果找不到
index
,请不要关闭scanner
。如果找到
index
,请不要关闭out
。您打开文件进行写入,即使您不需要写入任何内容。
你忽略异常。
if(wri != false)
是一种很晦涩的写法if (wri)
.如果您只使用
write()
方法,则无需将FileWriter
包装在PrintWriter
中。
由于您在 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