3

明確にするために: Eclipseからのメッセージのためにコンパイルすらできません。最初のコードスニペット:inputinputBufferは認識されません。2番目のコードスニペット、Eclipseはスイッチ「コンプライアンスとJREを1.7に切り替える」を要求しています

私はtry-with-resourcesを初めて使用しますが、構文や間違っていることを完全に理解することはできません。これが私のコードです

try {
   FileReader input = new FileReader(this.fileName);
   BufferedReader  inputBuffer = new BufferedReader (input);

   String line;
   while ((line = inputBuffer.readLine()) != null) {
       String[] inputData = line.split(",");

        Node<Integer> newNode = new Node<Integer>(Integer.parseInt(inputData[0]),
                                                  Integer.parseInt(inputData[1]));
        this.hashMap.add(newNode);
   }

//inputBuffer.close();
//input.close();

}catch (NumberFormatException nfe){
    System.out.println(
         "Repository could not load data due to NumberFormatException: " + nfe); 
}catch (FileNotFoundException fnfe) {
    System.out.println("File not found, error: " + fnfe);
}finally { 
    inputBuffer.close();
    input.close();
}

最後のブロックが機能しないので、試してみたかった

try (FileReader input = new FileReader(this.fileName)) {
      ......        
}catch (FileNotFoundException e) {
      ......
}finally {
      inputBuffer.close();
      input.close();
}

でも

  • また、BufferedReaderをtry (...)...に追加する必要がありますが、どうすればよいですか?

  • また、これには「コンプライアンスとJREを1.7に切り替える」必要があります。それが何を意味し、それが私のプログラムにどのように影響するかは今のところわかりません。誰かがそれが何を意味するのかを説明するか、私が何か間違ったことをしているのかどうかを説明するまで、私はそれをしたくありません。

編集

tryブロックの前に宣言を移動し、nullで初期化しましたが、これは「OK」ですか?

FileReader input = null;
BufferedReader  inputBuffer = null;

try {
    input = new FileReader(this.fileName);
    inputBuffer = new BufferedReader (input);
    ...
}   ...
4

2 に答える 2

6

try-with-resourcesステートメントを使用するには、Java7を使用する必要があります
また、try-with-resourcesブロックはAutoClosableインターフェースを使用するため、finallyブロックでこれらのクローズを除外します。それらは自動的に呼び出されます。
BufferedReaderを使用する場合は、次のことを試してください。

try (BufferedReader bufRead = new BufferedReader(new FileReader(this.fileName))) {
      ......        
}catch (FileNotFoundException e) {
      ......
}

次のように複数のリソースを使用することもできます。

try (FileReader input = new FileReader(this.fileName);
     BufferedReader bufRead = new BufferedReader(input) ) {
          ......        
    }catch (FileNotFoundException e) {
          ......
    }

もう1つの重要なことがありBufferedReaderます。別のものをラップ するaを閉じるとReader、この基Readerになるものも閉じられます。

于 2012-12-16T18:32:32.777 に答える
5

try {} catch(){}の前に、まずinputとinputBufferを宣言します

このような

FileReader input = null;
BufferedReader  inputBuffer = null;
try
{
 ------
 -------


}

最後の最初のブロックで:以下の2つの条件を確認してください

if(inputBuffer != null)
{
    inputBuffer.close();
}
if(input != null)
{
      input.close();
}

2番目:試して複数のリソースが必要な場合は、次のようにします。

try ( OpenDoor door = new OpenDoor(); OpenWindow window = new OpenWindow() ) 
{

}

この場合、finallyブロックで上記のリソースを閉じる必要はありません。

于 2012-12-16T18:36:03.793 に答える