2017-06-16 14 views
0

私は助けが必要です。有効なシリアルキーと無効なシリアルキーを区別しようとしました。私は正しく出力を得た。しかし、ファイルに書き込もうとすると、最後の行だけが書き込まれます。 出力は次のようになります。最後の行だけがファイルに書き込まれています

1A000000 1A000001 1A000002 1A000003 1A000004 1A000005 2B200012 3C343455 4D342423 5E324344 6F435435 7G245347

と私は、ファイルにこれを書きたいです。しかし、7G245347だけが書かれ​​ています。あなたはPrintWriterループ
の次の反復中に他のことを書くために開いておきたい

import java.util.*;` 
import java.io.*; 
public class ValidSerialKey { 

    public static void main(String[] args) throws IOException { 
     String keys = ""; 

     File file = new File("serialkeys.txt"); 
     try{   
     Scanner scan = new Scanner(file);   
      while (scan.hasNext()){ 
       keys = scan.nextLine(); 

       if ((keys.charAt(0) == '1' || keys.charAt(0) == '2' || keys.charAt(0) == '3' || keys.charAt(0) == '4' || keys.charAt(0) == '5' || 
        keys.charAt(0) == '6' || keys.charAt(0) == '7' || keys.charAt(0) == '8' || keys.charAt(0) == '9') && 
        (keys.charAt(1) == 'A' || keys.charAt(1) == 'B' || keys.charAt(1) == 'C' || keys.charAt(1) == 'D' || keys.charAt(1) == 'E' || 
        keys.charAt(1) == 'F' || keys.charAt(1) == 'G' || keys.charAt(1) == 'H' || keys.charAt(1) == 'I' || keys.charAt(1) == 'J' || 
        keys.charAt(1) == 'K' || keys.charAt(1) == 'L' || keys.charAt(1) == 'M' || keys.charAt(1) == 'N' || keys.charAt(1) == 'O' || 
        keys.charAt(1) == 'P' || keys.charAt(1) == 'Q' || keys.charAt(1) == 'R' || keys.charAt(1) == 'S' || keys.charAt(1) == 'T' || 
        keys.charAt(1) == 'U' || keys.charAt(1) == 'V' || keys.charAt(1) == 'W' || keys.charAt(1) == 'X' || keys.charAt(1) == 'Y' || 
        keys.charAt(1) == 'Z')){ 

        System.out.println(keys); 

        File filein = new File("ValidKeys.txt"); 
        try{ 
         try 
          (PrintWriter pw = new PrintWriter(filein)){ 
           pw.print(keys); 
           pw.close(); 
         } 
        }catch (FileNotFoundException ex){ 
         System.out.println(ex.getMessage()); 
        } 


       }//end of if    
      }//end of while 
      scan.close(); 
     }catch (FileNotFoundException exp){ 
      System.out.println(exp.getMessage()); 
     } 
    } 
} 
+0

...:あなたはtry with resources文で全体のロジックを含むロジックによって

loop try (PrintWriter pw = new PrintWriter(uniqueFile)){ pw.print(keys); }//end of inner try end loop 


あなたはこのロジックを置き換える必要がありますファイルを追加することを求めずに。 – AxelH

+0

バリデーションの問題。あなたの状態をアップしてください。文字は数値なので、 'c> = '0' && c <= '9'のように区間[0-9]を調べることができます。 '&& c <=' z''。 – AxelH

+0

ありがとう!私のコードは完全に動作します。 –

答えて

2

だから、各反復で新しいものを作成しないでください。

try with resourcesを使用すると、PrintWriterインスタンスを明示的に閉じる必要はありません。あなたは、ループ内で同じファイルを再度開く保つ

try(PrintWriter pw = new PrintWriter(uniqueFile)){ 
    loop 
     pw.print(keys);      
    end loop 
} 
catch (IOException e){ 
    ... // exception handling 
} 
+1

これは1回だけ動作し、ループ内の 'PrintWriter'を閉じました。これはループの外側で行う必要があります。 – AxelH

+0

ありがとうございました:)私はあなたのコメントとその問題に対処するためのより良い方法を考えています。私は更新しました。最後に、「リソースを試してみよう」が適しています。このバージョンについてどう思いますか? – davidxxx

+0

OPが例外のループを解除したいかどうかによって異なります。私はあなたのようにリソースを試してみましょうが、その中にいくつかの例外をキャッチします( 'PrintWriter.append'は何も指定していませんので、あなたの場合は危険ですか?しかし、私たちはユーザ(スキャナ)の入力に基づいてループを破るのを防ぐことができます(しかし、私はここで多く考えています)) – AxelH

関連する問題