2012-09-05 182 views
0

這是一項家庭作業,我必須編寫一個程序,讀取「input.txt」文件並查看打印一次稱呼的次數(例如:Donald Duck,4你好唐老鴨四次) 我遇到的問題是將稱呼輸出到一個名爲「output.txt」的文本文件中 出於某種原因,它只打印出input.txt中最後一行的稱呼而不是所有他們的..這是我到目前爲止有:輸出到Java中的文本文件

import java.util.*; 
    import java.io.*; 

    public class Driver0 { 

     public static void main (String [] args) { 
     Scanner userInput = new Scanner(System.in); 
     System.out.println("Would you like the output to be written to a file?"); 
     Scanner read; 
     String input = userInput.nextLine(); //user input 
     if(input.equals("yes")) { 
      System.out.println("Writing to \"output.txt\" now.."); 
     } 
     else { 
      System.out.println("Printing to screen:"); 
     }   
      try { 
      read = new Scanner(new File("input.txt")); //scanner reading file 
      } 
      catch (FileNotFoundException e){ 
       System.out.println("File not found."); 
       return; 
      } 
     while(read.hasNextLine()) { 
      String newInput = read.nextLine(); 
      String [] inputArray = newInput.split(","); //spliting 
      int num = 0; 
      num = Integer.parseInt(inputArray[2].trim()); 
       for(int i = 0; i < num; i++) { 
       if(input.equals("yes")) { //writing to file 
        Driver0.outputting(inputArray); 
        } 
       else { //writing to screen 
        System.out.println("Hello" + inputArray[1] + inputArray[0]); 
       } 
      } 
     } 
     } 
     public static void outputting (String [] inputArray) { 
     PrintWriter output = null; 
     String fileName = "output.txt"; 
      try { 
      output = new PrintWriter(new FileWriter(fileName)); 
      } 
      catch(IOException error){ 
       System.out.println("Sorry, can't open for writing."); 
       return; 
      } 
      output.println("Hello" + inputArray[1] + inputArray[0]); 
       output.close();  
     } 
    } 

我的問題是在輸出方法中最有可能的還是它有說寫文件的註釋旁邊

回答

2

FileWriter類有一個second constructor,需要一個boolean參數告訴它追加到現有文件的末尾,而不是從頭開始覆蓋它。

output = new PrintWriter(new FileWriter(fileName, true)); 
+0

謝謝!這完全工作你真棒:) – Gcap

4

每次通過while循環時,您將創建一個新的PrintWriter,向其寫入一行,然後關閉它。這只是每次覆蓋文件。您可能應該只創建一個您保持打開的PrintWriter,並且代替它附加

1

這是因爲您每次創建新文件時都使用新的PrintWriter。

您sulution最低限度改變,速戰速決,必應(雖然有在你的代碼然而,許多設計上的問題):

import java.util.*; 
import java.io.*; 

public class Driver0 { 

    public static void main (String [] args) { 
    Scanner userInput = new Scanner(System.in); 
    System.out.println("Would you like the output to be written to a file?"); 
    Scanner read; 
    String input = userInput.nextLine(); //user input 
    if(input.equals("yes")) { 
     System.out.println("Writing to \"output.txt\" now.."); 
    } 
    else { 
     System.out.println("Printing to screen:"); 
    }   
     try { 
     read = new Scanner(new File("input.txt")); //scanner reading file 
     } 
     catch (FileNotFoundException e){ 
      System.out.println("File not found."); 
      return; 
     } 
     //////////////////////// 
     PrintWriter output; 
     String fileName = "output.txt"; 
     try { 
     output = new PrintWriter(new FileWriter(fileName)); 
     } 
     catch(IOException error){ 
      System.out.println("Sorry, can't open for writing."); 
      return; 
     } 
     //////////////////////// 
    while(read.hasNextLine()) { 
     String newInput = read.nextLine(); 
     String [] inputArray = newInput.split(","); //spliting 
     int num = 0; 
     num = Integer.parseInt(inputArray[2].trim()); 
      for(int i = 0; i < num; i++) { 
      if(input.equals("yes")) { //writing to file 
       Driver0.outputting(output,inputArray); 
       } 
      else { //writing to screen 
       System.out.println("Hello" + inputArray[1] + inputArray[0]); 
      } 
     } 
    } 
    /////////////////////////////// 
    output.close();  
    /////////////////////////////// 
    } 
    public static void outputting (PrintWriter output,String [] inputArray) { 
     output.println("Hello" + inputArray[1] + inputArray[0]); 
    } 
}