2016-12-01 11 views
1

最初の従業員の詳細を表示するようにコードを取得しましたが、他の2つの従業員の詳細が表示されています。私はそれらを追加する方法がわかりません。私は、printWriterがコードを置くのに適切なものであるかどうか、そしてそれ以外の場合、何が最善であるかは分かりません。ユーザー入力をテキストファイルに保存してすべてのデータを表示する方法は?

は、コードは以下の通りです:)

public static void main(String[] args) throws IOException{ 
    Scanner scan = new Scanner(System.in); 
    File employeeDetails = new File("Employees.txt"); 
    PrintWriter pw = new PrintWriter(new FileWriter(employeeDetails, true)); 

    for(int i=0; i<3; i++){ 
     FileWriter fw = new FileWriter("Employees.txt", true); 
     try{ 
      boolean repeat = false; 

      System.out.println("Enter name: "); 
      String name = scan.next(); 
      pw.println("name: " + name); 

      System.out.println("Enter job title: "); 
      String jobTitle = scan.next(); 
      pw.println("Job title: " + jobTitle); 

      do{ 
       try{ 
        System.out.println("Enter age: "); 
        int age = scan.nextInt(); 
        pw.println("Age: " + age); 
        repeat = true; 
       } 
       catch(InputMismatchException ex){ 
        System.err.println("Invalid age please enter a whole number."); 
        scan.next(); 
        continue; 
       } 
      }while(repeat==false); 
      do{ 
       try{ 
        System.out.println("Enter salary per year: "); 
        double salary = scan.nextDouble(); 
        pw.println("Salary: " + salary); 
        repeat = false; 
       } 
       catch(InputMismatchException ex){ 
        System.err.println("Invalid salary please enter a decimal."); 
        scan.next(); 
        continue; 
       } 
       catch(MissingFormatArgumentException ex){ 
        System.err.println("Invalid salary please enter a decimal."); 
        scan.next(); 
        continue; 
       } 
      }while(repeat); 
     }finally{ 
      pw.close(); 
      fw.close(); 
     } 
    } 
    scan.close(); 
} 

}

+2

'fw'はどのように便利ですか?あなたはそれを使用しません... コードを実行するとどうなりますか? – ItamarG3

+0

あなたはそれを修正しましたか? – ItamarG3

+0

申し訳ありません私はしばらくの間にスタックのオーバーフローにされていない、私はそれを修正するために管理して、あなたの助けてくれてありがとう。私はファイルライターを持っていて、最後に真実があると思って、私が書いていたファイルに追加すると思った。 – Sarah

答えて

0

あなたの問題はあなたがPWを閉じておくことで得られます。 forループの後にpwの終了を移動します。私はあなたのコードを変更し、次の作品:

public static void main(String[] args) throws IOException { 
    Scanner scan = new Scanner(System.in); 
    File employeeDetails = new File("Employees.txt"); 
    PrintWriter pw = new PrintWriter(new FileWriter(employeeDetails, true)); 

    for (int i = 0; i < 3; i++) { 
     //FileWriter fw = new FileWriter("Employees.txt", true); 
     try { 
      boolean repeat = false; 

      System.out.println("Enter name: "); 
      String name = scan.next(); 
      pw.println("name: " + name); 

      System.out.println("Enter job title: "); 
      String jobTitle = scan.next(); 
      pw.println("Job title: " + jobTitle); 

      do { 
       try { 
        System.out.println("Enter age: "); 
        int age = scan.nextInt(); 
        pw.println("Age: " + age); 
        repeat = true; 
       } catch (InputMismatchException ex) { 
        System.err.println("Invalid age please enter a whole number."); 
        scan.next(); 
        continue; 
       } 
      } while (repeat == false); 
      do { 
       try { 
        System.out.println("Enter salary per year: "); 
        double salary = scan.nextDouble(); 
        pw.println("Salary: " + salary); 
        repeat = false; 
       } catch (InputMismatchException ex) { 
        System.err.println("Invalid salary please enter a decimal."); 
        scan.next(); 
        continue; 
       } catch (MissingFormatArgumentException ex) { 
        System.err.println("Invalid salary please enter a decimal."); 
        scan.next(); 
        continue; 
       } 
      } while (repeat); 
     } finally { 
      //pw.close(); 
      //fw.close(); 
     } 
    } 
    pw.close(); 
    scan.close(); 
} 
+0

私のコードを編集してくれてありがとう!私はそれをうまく動かすことができたし、それが問題だとは考えていなかった! – Sarah

0

だから問題は、新しいファイルを作成し、forループ内の各時間(他の削除)

for(int i=0; i<3; i++){ 
     FileWriter fw = new FileWriter("Employees.txt", true); 

プット外です

+0

ファイルはループの外で作成され、 'pw'はそのファイルに書き込む。ここで 'fw'は使用しません – rafid059

+0

また、append引数がtrueであるため、ファイルが使用されても削除されません。 –

+0

@RafiduzzamanSonnetはい、いいえ、毎回ファイルが再作成されますが、fwは使用されていません。 – ItamarG3

0

あなたは必要ありませんfw

for(int i=0; i<3; i++){ 
    FileWriter fw = new FileWriter("Employees.txt", true);// remove this line 

... 

も、この行削除:

fw.close(); 

をそうでなければ、NullPointerException

+0

ありがとうございます!私はこれが私が間違っているところだったことに気付かなかった! – Sarah

+0

@Sarahあなたは答えを受け入れるべきです – ItamarG3

関連する問題