0

メソッドの準備はすべて整っていますが、本来の目的どおりに重複をテキストファイルに書き込まないだけで、画面には出力されますが、ファイルには出力されませんか?

// Open the file.
File file = new File("file.txt");
Scanner inputFile = new Scanner(file);
//create a new array set Integer list
Set<Integer> set = new TreeSet<Integer>();
//add the numbers to the list
while (inputFile.hasNextInt()) {
     set.add(inputFile.nextInt());
}
// transform the Set list in to an array
Integer[] numbersInteger = set.toArray(new Integer[set.size()]);
//loop that print out the array
for(int i = 0; i<numbersInteger.length;i++) {
      System.out.println(numbersInteger[i]);
}
for ( int myDuplicates : set) {
     System.out.print(myDuplicates+",");
     BufferedWriter duplicates = new BufferedWriter(new FileWriter("sorted.txt"));
     try {
           duplicates.write(myDuplicates + System.getProperty("line.separator"));
      } catch (IOException e) {
            System.out.print(e);
            duplicates.close();
      }
  //close the input stream
      inputFile.close();
     }
}

この部分は私が話しているものです

for ( int myDuplicates : set) {
      System.out.print(myDuplicates+",");
      BufferedWriter duplicates = new BufferedWriter(new FileWriter("sorted.txt"));
      try {
            duplicates.write(myDuplicates + System.getProperty("line.separator"));
      } catch (IOException e) {
            System.out.print(e);
            duplicates.close();
      }
      //close the input stream
      inputFile.close();
      }
}
4

1 に答える 1

2

duplicates.close()がある場合にのみ呼び出していますIOException。ライターを閉じないと、バッファリングされたデータがライターにフラッシュされません。finally例外があるかどうかにかかわらず、ライターを閉じるように、ブロックでライターを閉じる必要があります。

ただし、ループのでファイルを開いたり閉じたりする必要があります。ループ全体でファイルを開いたままにします。あなたはおそらく欲しい:

BufferedWriter duplicates = new BufferedWriter(new FileWriter("sorted.txt"));
try {
    // Loop in here, writing to duplicates
} catch(IOException e) {
    // Exception handling
} finally {
    try {
        duplicates.close();
    } catch (IOException e) {
        // Whatever you want
    }
}

Java 7 を使用している場合は、try-with-resources ステートメントを使用して、より簡単にこれを行うことができます。

(また、何らかの理由inputFile.close()で、実際に読み取りを終了してから数マイル後に、ループ内で呼び出しています。これも、finally不要になったときにブロック内にある必要がありinputFileます。)

于 2013-05-16T21:36:13.310 に答える