0

これは宿題です。「input.txt」ファイルを読み取り、挨拶を何回印刷するかを確認するプログラムを作成する必要があります (例: Donald Duck, 4 なので、Hello Donald Duck を 4 回印刷します)。 m は、あいさつ文を「output.txt」というテキスト ファイルに出力することです。何らかの理由で、input.txt のすべての行ではなく、最後の行のあいさつ文のみを出力します。

   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();       
      } 
   }

私の問題は、おそらく出力メソッド内、またはその横にファイルへの書き込みを示すコメントがある場所にあります

4

3 に答える 3

4

whileループを通過するたびに、新しい を作成しPrintWriter、それに 1 行を書き込んでから閉じます。これは、毎回ファイルを上書きするだけです。おそらくPrintWriter、開いたままにし、代わりに追加するものだけを作成する必要があります。

于 2012-09-06T00:07:25.237 に答える
2

FileWriterクラスには、最初から上書きするのではなく、既存のファイルの最後に追加するように指示する引数を取る2 番目のコンストラクターがあります。boolean

output = new PrintWriter(new FileWriter(fileName, true));
于 2012-09-06T00:09:37.483 に答える
1

これは、新しい PrintWriter を使用して毎回新しいファイルを作成しているためです。

最小限の変更、ソリューションのクイック フィックスは次のようになります (ただし、コードにはまだ多くの設計上の問題があります)。

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]);
  } 
}
于 2012-09-06T00:08:51.260 に答える