2014-02-20 5 views
1

Я пытаюсь написать текстовый файл, который будет содержать только большие блоки текста, с которыми я планировал работать позже. Существует несколько комбинаций переменных, с которыми мне приходится иметь дело, и набирать их все слишком утомительно. Я попытался запустить этот код дважды, и все, что он делает, перезаписывает первую строку снова и снова, предоставляя мне последнюю комбинацию переменных. Это код.Java - Добавить текст в конец файла

import java.util.*; 
import java.io.*; 
public class FileWritingThing { 
    public static void main(String[]args) throws IOException{ 
     String precision = null; 
     String criteria = null; 
     String specLevel = null; 
     String precondLevel = null; 
     PrintWriter writer = null;  

     for(int i = 0; i < 3; i++){ 
      if(i == 0){ 
       precision = "Precision = 4;"; 
      } 
      if(i == 1){ 
       precision = "Precision = 8;"; 
      } 
      if(i == 2){ 
       precision = "Precision = 12;"; 
      } 
      for(int j = 0; j < 3; j++){ 
       if(j == 0){ 
        criteria = "Objective Function;"; 
       } 
       if(j == 1){ 
        criteria = "Domain;"; 
       } 
       if(j == 2){ 
        criteria = "Objective Function + Domain;"; 
       } 
       for(int k = 0; k < 3; k++){ 
        if(k == 0){ 
         specLevel = "Speculation Level = 10000;"; 
        } 
        if(k == 1){ 
         specLevel = "Speculation Level = 100000;"; 
        } 
        if(k == 2){ 
         specLevel = "Speculation Level = 1000000;"; 
        } 
        for(int l = 0; l < 3; l++){ 
         if(l == 0){ 
          precondLevel = "Precondition Level = 0;"; 
         } 
         if(l == 1){ 
          precondLevel = "Precondition Level = 25;"; 
         } 
         if(l == 2){ 
          precondLevel = "Precondition Level = 100;"; 
         } 
         writer.println(precision + "\n" + criteria + "\n" + specLevel + "\n" + precondLevel + "\n"); 
        } 
       } 
      } 
     } 
    writer.close(); 
} 

}

/*try { 
    writer = new PrintWriter(new BufferedWriter(new FileWriter("permutations.txt", true))); 
} catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (UnsupportedEncodingException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
*/ 

Все, что мне нужно знать, как добавить каждый блок в файл строки. Кроме того, у меня возникает какая-то странная проблема, хотя даже если я использую «\ n» для разделения списков переменных, все это отображается на одной строке независимо. Прокомментированный код внизу был первоначально включен непосредственно перед строкой «writer.println()».

+0

Возможный дубликат? http://stackoverflow.com/questions/1625234/how-to-append-text-to-an-existing-file-in-java –

+0

@JohnDorian Хорошо, похоже, проблема в написании этого файла, но она выиграла 'напечатайте новую строку. Опять же, текст сгруппирован. – user3308219

+0

Попробуйте вызвать writer.println() отдельно для каждой строки, которую вы хотите, не уверен, что она будет работать, но стоит сделать снимок. Как writer.println (точность); writer.println (критерии); writer.println (specLevel); и т.д –

ответ

1

Если прокомментированные строки находятся чуть выше writer.println(), тогда это может объяснить странное поведение, которое вы испытываете. Вы должны создать PrintWriter вне цикла for. Что-то вроде этого

PrintWriter writer = null; 
try { 
    writer = new PrintWriter(new BufferedWriter(new FileWriter("permutations.txt", true))); 
    // Most outer for loop goes here 
    for(int i=0......) { 
    } 
} catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (UnsupportedEncodingException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch(Exception e) { e.printStackTrace(); } 
finally { 
    if(writer!=null) { 
     try { 
      writer.flush(); 
      writer.close(); 
     } catch(Exception ignore) {} 
    } 
} 
Смежные вопросы