2014-04-22 2 views
0

Моя программа читается в текстовом файле in.txt. Этот текстовый файл может иметь произвольное количество строк.Почему мой текстовый файл не перезаписывается после каждого выполнения?

Моя проблема в том, что когда я пытаюсь записать в выходной файл (out.txt), он добавляет его вместо перезаписи.

Выходной файл должен иметь тот же номер, что и входной файл.

try { 
     inFile = new Scanner(new File("in.txt")); 

     while (inFile.hasNext()) { 

     // Methods and stuff that doesn't matter... 
     // Problem starts here 

      try{ 
       outFile = new PrintWriter((new FileWriter("out.txt", true))); 
       outFile.println(ArrayToString(intArray));     
      } 
      catch (IOException e) { 
       System.out.print("Could not find and write to the output file. " + e); 
       e.printStackTrace(); 
      } 
      finally { 
       outFile.flush(); 
       outFile.close(); 
      } 
     } 
    } 
    catch (FileNotFoundException e) { 
     System.out.print("Could not find the input file. " + e); 
     e.printStackTrace(); 
    } 

Метод ArrayToString возвращает строку для записи.

EDIT:

Я забыл добавить эту деталь:

После повторного прочтения инструкции, я не должен создавать текстовый файл, просто проверить, если она есть.

+0

С момента последнего редактирования я не понимаю, о чем должен быть задан вопрос. Не уверен, что я знал раньше, но теперь я полностью в тупике. –

ответ

3

См the Javadoc for the FileWriter constructor:

общественного FileWriter (String имя_файла, логическое добавление) бросает IOException

конструирует FileWriter данный объект имя файла с логическим , указывающий, следует ли добавить данные написано.

Попробуйте установить флаг добавления в значение false. Затем используйте один и тот же сценарий, а не создавайте новый каждый раз через цикл (это означает, что вы должны объявить FileWriter выше начала цикла while).

(Btw проверить java.util.Arrays.toString, вам не нужно, чтобы написать свой собственный код для этого.)

+0

Я пробовал это, но он пишет только одну строку - самый последний результат метода. – trama

+0

@trama: понял, посмотрим, лучше ли это –

+0

. После прочтения инструкций я не должен создавать текстовый файл, просто проверяя, есть ли он там. – trama

2

Проблема здесь:

 try{ 
      outFile = new PrintWriter((new FileWriter("out.txt", true))); 
      outFile.println(ArrayToString(intArray));     
     } 
     catch (IOException e) { 
      System.out.print("Could not find and write to the output file. " + e); 
      e.printStackTrace(); 
     } 

Изменение PrintWriter линии до:

 outFile = new PrintWriter((new FileWriter("out.txt", false))); 

Теперь, похоже, вы открываете файл в каждом цикле через свой входной файл. Если вы желаете, чтобы открыть этот файл один раз, и писать в него для каждой строки в файле ввода, перемещения открытия и закрытия за пределами цикла в то время как это:

try { 

    inFile = new Scanner(new File("in.txt")); 
    // here we open the out file, once 
    outFile = new PrintWriter((new FileWriter("out.txt", false))); 

    while (inFile.hasNext()) { 

    // Methods and stuff that doesn't matter... 
    // Problem starts here 

     try{ 
      // this will write a line to the out.txt file containing the intArray as a String 
      outFile.println(ArrayToString(intArray));     
     } 
     catch (IOException e) { 
      System.out.print("Could not find and write to the output file. " + e); 
      e.printStackTrace(); 
     } 

    } 
} 
catch (FileNotFoundException e) { 
    System.out.print("Could not find the input file. " + e); 
    e.printStackTrace(); 
} 
finally { 
      inFile.close(); 
      outFile.flush(); 
      outFile.close(); 
     } 
0

изменения

outFile = new PrintWriter((new FileWriter("out.txt", true))); 

в

outFile = new PrintWriter((new FileWriter("out.txt", false))); 

и

outFile.println(ArrayToString(intArray)); 

до

outFile.print(ArrayToString(intArray)); 
Смежные вопросы