2017-07-25 6 views
0

私は最近、javaでのファイル処理について学び始めました。しかし、このコードでは、すべての読み書きの終わりにファイルを閉じようとしていますが、このようにしてエラーに直面しています。DataInputStreamとDataOutputStreamをJavaで閉じることができません

package trycatch; 

import java.util.Scanner; 
import org.omg.CORBA.DataInputStream; 

import java.*; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.Writer; 

public class Source { 

public static void main(String[] args) throws Exception { 

    Scanner input = new Scanner(System.in); 
    try { 
    File f = new File("record.txt"); 

    FileOutputStream writing = new FileOutputStream(f); 
    DataOutputStream write = new DataOutputStream(writing); 
    write.writeUTF("What are the things that you want to do"); 

    String str; 

    FileInputStream reading = new FileInputStream(f); 
    java.io.DataInputStream read = new java.io.DataInputStream(reading); 
    str = read.readUTF(); 
    System.out.println(str); 
    } 
    catch(FileNotFoundException e) { 

     System.out.println("The system collapsed"); 
    } 
    finally { 
     write.close(); // write cannot be resolved 
     read.close(); // read cannot be resolved 
    } 

    input.close(); 
} 
} 

私はついにキーワードをしようとしていますが、私のIDEは、を読み、私はそこにそれを書くときを書く認識できないなぜあなたは私に言うことができますか?

書き込みは、あなたがしよう、ブロック内writeを宣言している

+0

は重複として閉じられました。あなたはほとんどの助けをした答えを受け入れるのですか? – dpr

答えて

1

を解決することはできません。これは異なるスコープであるため、finallyブロック内では解決できません。

あなたは最終的で、それがアクセス可能にしようと、ブロックの前にwriteを宣言する必要があります:

あなたは/適切なリソースの取扱いを確保するためのtry-とリソース構文を使用する必要がある可能性のJavaの最近のバージョンでは
DataOutputStream write = null; 
try { 
... 
    write = new DataOutputStream(writing); 
... 
} finally { 
    if (write != null) { 
     write.close(); 
    } 
} 

。これを使用すると、最終的には、ブロックを省略することができ、JVMは、tryブロックが残っているとき、あなたのリソースのクローズの世話をする:あなたの読み取り

try (DataOutputStream write = new DataOutputStream(writing)) { 
    ... 
} 
1

とフィールドを書き、最後にすることができませんアクセス、ブロックを試してローカルです試してみてください。

0

tryブロックに書き込みと読み取りが作成され、スコープはブロック内にのみあります。 inputと宣言している場所に宣言を移動すると、その宣言が機能するはずです。

1

はそのようにそれを試してみてください。質問にもかかわらず

package trycatch; 

import java.util.Scanner; 
import org.omg.CORBA.DataInputStream; 

import java.*; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.Writer; 

public class Source { 

public static void main(String[] args) throws Exception { 

    Scanner input = new Scanner(System.in); 
    DataOutputStream write = null; 
    java.io.DataInputStream read = null; 
    try { 
    File f = new File("record.txt"); 

    FileOutputStream writing = new FileOutputStream(f); 
    write = new DataOutputStream(writing); 
    write.writeUTF("What are the things that you want to do"); 

    String str; 

    FileInputStream reading = new FileInputStream(f); 
    read = new java.io.DataInputStream(reading); 
    str = read.readUTF(); 
    System.out.println(str); 
    } 
    catch(FileNotFoundException e) { 

     System.out.println("The system collapsed"); 
    } 
    finally { 
     if (write != null) 
      write.close(); // write cannot be resolved 
     if (read != null) 
      read.close(); // read cannot be resolved 
    } 

    input.close(); 
} 
} 
関連する問題