写入文件问题

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