2012-09-05 80 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]); 
    } 
}