写入文件问题

时间:2017-06-15 20:36:05

标签: java file java.util.scanner printwriter

所以这可能是也可能不是一个愚蠢的问题,但我们走了!

所以我正在尝试写入一个文件并且它不会覆盖但是它会一遍又一遍地写,所以我需要帮助。

方法:

@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();
    }
}

2 个答案:

答案 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));