2016-01-30 4 views
0

У меня есть рабочая программа, которая отлично печатает на консоли. Однако у меня возникают проблемы, если я хочу напечатать его в выходном файле. Он выполняет только инструкцию Else. Он не войдет в инструкцию If и Else.PrintWriter on Multiple If Else Statement

public void processFile() 
    { 
    final String IN = "IN"; 
    final String OUT = "OUT"; 
    final String CLOSE = "CLOSE"; 
    PrintWriter fileOut; 

    final String FILE_NAME_IN = "Events.txt"; 
    final String FILE_NAME_OUT = "SystemLog.txt"; 
    BufferedReader fileIn; 
    String inputLine; 

    try 
    { 
     // print out initial state 
     fileOut = new PrintWriter(new FileWriter(FILE_NAME_OUT)); 
     System.out.println("---------"); 
     fileOut.println("---------"); 
     System.out.println("INCOMING PROCESS"); 
     fileOut.println("INCOMING PROCESS"); 
     System.out.println(list.toString()); 
     fileOut.println(list.toString()); 
     System.out.println("OUTGOING PROCESS"); 
     fileOut.println("OUTGOING PROCESS"); 
     System.out.println(queue.toString()); 
     fileOut.println(queue.toString()); 
     fileOut.close(); 
    } 
    catch(IOException ioe) 
    { 
     ioe.printStackTrace(); 
    } 


    try 
    { 
     // instantiate reader and grab the first line 
     fileIn = new BufferedReader(new FileReader(FILE_NAME_IN)); 
     inputLine = fileIn.readLine(); 

     // While we still have events to process... 

     while(inputLine != null) 
     {    
     String [] tokens = inputLine.split(" "); // read and tokenize line from text file 

     if(tokens[0].equals(IN)) 
     {      

      try 
      { 
       fileOut = new PrintWriter(new FileWriter(FILE_NAME_OUT)); 
      System.out.println("\n---------"); 
      fileOut.println("\n---------"); 
      System.out.println(tokens[0] + " " + tokens[1]); 
      fileOut.println(tokens[0] + " " + tokens[1]); 
      System.out.println("---------"); 
      fileOut.println("---------"); 
      System.out.println("\n\n"); 
      fileOut.println("\n\n"); 

      // print status  
      System.out.println("INCOMING PROCESS"); 
      fileOut.println("INCOMING PROCESS"); 
      System.out.println(list.toString()); 
      fileOut.println(list.toString()); 
      System.out.println("OUTGOING PROCESS"); 
      fileOut.println("OUTGOING PROCESS"); 
      System.out.println(queue.toString()); 
      fileOut.println(queue.toString()); 
      fileOut.close(); 
      } 
      catch(IOException ioe) 
      { 
      ioe.printStackTrace(); 
      } 

     } 
     else if(tokens[0].equals(OUT)) 
     {  
      try 
      { 
      fileOut = new PrintWriter(new FileWriter(FILE_NAME_OUT)); 
      System.out.println("\n---------"); 
      fileOut.println("\n---------"); 
      System.out.println(tokens[0] + " " + tokens[1]); 
      fileOut.println(tokens[0] + " " + tokens[1]); 
      System.out.println("---------"); 
      fileOut.println("---------"); 
      System.out.println("\n\n"); 
      fileOut.println("\n\n"); 

      // print status  
      System.out.println("INCOMING PROCESS"); 
      fileOut.println("INCOMING PROCESS"); 
      System.out.println(list.toString()); 
      fileOut.println(list.toString()); 
      System.out.println("OUTGOING PROCESS"); 
      fileOut.println("OUTGOING PROCESS"); 
      System.out.println(queue.toString()); 
      fileOut.println(queue.toString()); 
      fileOut.close(); 
      } 
      catch(IOException ioe) 
      { 
      ioe.printStackTrace(); 
      } 
     } 
     else //CLOSE 
     { 
      try 
      { 
       fileOut = new PrintWriter(new FileWriter(FILE_NAME_OUT)); 
      System.out.println("\n\n---------"); 
      fileOut.println("\n\n---------"); 
      System.out.println(tokens[0]); 
      fileOut.println(tokens[0]); 
      System.out.println("---------"); 
      fileOut.println("---------"); 
      System.out.println("\n\n"); 
      fileOut.println("\n\n"); 

      // print status  
      System.out.println("INCOMING PROCESS"); 
      fileOut.println("INCOMING PROCESS"); 
      System.out.println(list.toString()); 
      fileOut.println(list.toString()); 
      System.out.println("OUTGOING PROCESS"); 
      fileOut.println("OUTGOING PROCESS"); 
      System.out.println(queue.toString()); 
      fileOut.println(queue.toString()); 
      fileOut.close(); 
      } 
      catch(IOException ioe) 
      { 
      ioe.printStackTrace(); 
      } 
     } 

     inputLine = fileIn.readLine(); // grab the next line  
     } 
     fileIn.close(); 
    } 

    catch(IOException ioe) 
    { 
     System.out.println("Error: Could not read file."); 
     ioe.printStackTrace(); 
    } 
    } 
+0

Как выглядит ваш вход? Установите контрольную точку в инструкции if и отлаживайте ее, чтобы увидеть, является ли «токенс» тем, что вы ожидали от него. Кроме того, здесь много дублирующегося кода, вы можете захотеть реорганизовать свою печать на отдельный метод, который будет обрабатывать печать как на «System.out» (если это действительно то, что вы хотите сделать), так и в файле. – Riaz

ответ

1

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

Нет необходимости открывать и закрывать файл в каждом блоке if или else. Откройте его один раз в начале, напишите ему, когда вам нужно, и закройте его в конце.

+1

Спасибо @EJP Я получил его работу. Спасибо за ответ –