2017-04-10 9 views
1

このコードを実行しようとしましたが、ほとんどの場合動作します。 しかし、何番の番号が入力されたのか(最後の部分で)プログラムが印刷したいとき、プログラムは欲しくない。 どうしたのですか?そして私はそれをどのように修正できるのか?ビンファイルからデータを印刷できません

public static void main(String[] args) 
{ 
    FileOutputStream outChannel = null; 
    DataOutputStream numberChannel = null; 
    Scanner kb = new Scanner(System.in); 
    int sum = 0; 
    int count = 0; 
    int highest = 0; 
    int number = 0; 
    String name = ""; 
    try 
    { 
     System.out.println("Enter the name of the binary file: "); 
     name = kb.nextLine(); 
     outChannel = new FileOutputStream(name); 
     numberChannel = new DataOutputStream(outChannel); 
     System.out.println("Enter negative value to stop."); 
     System.out.println("Enter scores: "); 
     while(true) 
     { 
      number = kb.nextInt(); 
      if(number <0) 
       break; 
      numberChannel.writeInt(number); 
      sum+=number; 
      count++; 
      if(number>= highest) 
       highest = number; 

     } 
    } 
    catch(FileNotFoundException e) 
    { 
     System.out.println("File not found"); 
    } 
    catch(IOException e) 
    { 
     System.out.println("Cannot write file"); 
    }  
    finally 
    { 
     Scanner fileReader = new Scanner(name); 
     while(fileReader.hasNextInt()) 
     { 
      System.out.println(number); 
     } 

     fileReader.close(); 

     System.out.println("Average: " + ((double)sum/(double)count)); 
     System.out.println("Highest: " +highest); 
     try 
     { 
      if (numberChannel!= null) 
       numberChannel.close(); 
     } 
     catch(IOException e) 
     { 

     } 
    }  
} 

すべてが評価されているのに役立ちます!

PrintWriter writer = new PrintWriter(new File(name)); 
writer.println(number); 

そして、このようなファイルからの読み取りにScannerを使用します:

Scanner fileReader = new Scanner(new File(name)); 
while (fileReader.hasNextLine()) { 
     String nu = fileReader.nextLine(); 
     System.out.println(nu); 
} 

EDITED VERSION私はこのようなファイルへの書き込みに使用PrintWriter、与えたコメントへのパー

+0

'FileOutputStream'は、私のような生のバイトのストリームを書くためのものです年齢データ。文字のストリームを書き込むには、FileWriterの使用を検討してください。 [oracle](https://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html)のドキュメントを参照してください。 –

答えて

0

あなたのコードの:

public static void main(String[] args) throws IOException { 
     FileOutputStream outChannel = null; 
     DataOutputStream numberChannel = null; 
     Scanner kb = new Scanner(System.in); 
     int sum = 0; 
     int count = 0; 
     int highest = 0; 
     int number = 0; 
     String name = ""; 
     try { 
      System.out.println("Enter the name of the binary file: "); 
      name = kb.nextLine(); 
      PrintWriter writer = new PrintWriter(new File(name)); 
      System.out.println("Enter negative value to stop."); 
      System.out.println("Enter scores: "); 
      while (true) { 
       number = kb.nextInt(); 
       if (number < 0) { 
        break; 
       } 
       writer.println(number); 
       sum += number; 
       count++; 
       if (number >= highest) { 
        highest = number; 
       } 

      } 
      writer.close(); 
     } catch (FileNotFoundException e) { 
      System.out.println("File not found"); 
     } finally { 
      Scanner fileReader = new Scanner(new File(name)); 
      while (fileReader.hasNextLine()) { 
       String nu = fileReader.nextLine(); 
       System.out.println(nu); 
      } 

      fileReader.close(); 

      System.out.println("Average: " + ((double) sum/(double) count)); 
      System.out.println("Highest: " + highest); 
      try { 
       if (numberChannel != null) { 
        numberChannel.close(); 
       } 
      } catch (IOException e) { 

      } 
     } 
    } 
関連する問題