Как стереть существующий текст в файл - PullRequest
7 голосов
/ 24 января 2010

Я работаю над заданием для школы и пытаюсь получить что-то еще за дополнительную плату. Программа должна продемонстрировать различия в эффективности между линейным и двоичным поиском для заданного размера массива целых чисел. У меня есть цикл, который создает массив int [size], ищет случайное число, а затем создает новый массив int [size * 2].

Результаты затем записываются в текстовый файл. Выходные данные записываются нормально, но после компиляции и запуска программы несколько раз выходной файл содержит столько разделов данных.

Это мой код, который вложен в блок try / catch:

File output= new File("c:\\BigOhResults.txt");
int counter=2;

if (output.canWrite() && output.exists()) {
    BufferedWriter out= new BufferedWriter(new FileWriter(output, true));
    out.write(type+" \n\n"); //writes the search type
    out.write(type+"Search Results\n\n");

    while (counter <= data.size()) {
        out.write(data.get(counter-1)+" millisecond runtime " +
        "for a "+ data.get(counter-2)+" random number " +"sample size\n");
        counter=counter+2;
    }
}

Можно ли каким-либо образом стирать текст в этом выходном файле при каждом запуске программы?

Причина, по которой я это делаю, заключается в том, что профессор требует распечатки результатов с графическими данными. Я уже выполнил графическое требование, и оно отлично работает. Я просто хочу, чтобы распечатка файла соответствовала распечатке графика.

Ответы [ 4 ]

5 голосов
/ 24 января 2010

Второй аргумент конструктора FileWriter, который вы передаете в "true", это "append".Т.е., поскольку вы установили значение true, оно добавит ваш новый вывод в конец файла.Если вместо этого вы передадите false, он сотрет уже существующие данные и запишет их новыми.

4 голосов
/ 24 января 2010

Прочитайте документацию для FileWriter . Вы не хотите добавить.

3 голосов
/ 24 января 2010

Как уже упоминалось, конструктор [FileWriter] [1] позволяет указать, чтобы очистить существующий текст и начать с начала файла. Несколько других замечаний по поводу кода:

  • Проверка output.exists () является избыточной после вызова output.canWrite () и не требуется. output.canWrite () проверит, существует ли файл и можно ли в него записать.
  • Не забудьте закрыть объект BufferedWriter.

Вот так:

if (output.canWrite()) {
    BufferedWriter out = null;
    try {
        out = new BufferedWriter(new FileWriter(output, false));
        out.write(type+" \n\n"); //writes the search type
        out.write(type+"Search Results\n\n");

        while (counter <= data.size()) {
            out.write(data.get(counter-1)+" millisecond runtime " +
              "for a "+ data.get(counter-2)+" random number " +"sample size\n");
            counter=counter+2;
        }
    } catch (IOException e) {
        // Do what you want here, print a message or something
    } finally {
        if(out != null) {
            try {
                out.close();
            } catch (IOException e) {
                // Again, do what you want here
            }
        }
    }

}

[1]: http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html#FileWriter(java.io.File, логическое значение)

0 голосов
/ 14 февраля 2015

Хорошо, я попробовал что-то, и это сработало. Это когда у вас есть файл, который предназначен для добавления любого нового текста, но вы хотите сбросить / стереть содержимое файла в начале выполнения программы. Надеюсь, я понял.

    PrintWriter pw1 = new PrintWriter(new BufferedWriter(new FileWriter("newfile.txt")));
    pw1.close(); // Make sure the first PrintWriter object name is different from the second one.

    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("newfile.txt", true))); // PrintWriter in append-mode. When you recreate the text file with the same name, the file contents are erased because the previous object was not in append mode.
    pw.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...