2012-02-20 28 views
2

ファイルから入力を読み取ってJavaアプレットに読み込み、Pac-manレベルとして表示しようとしていますが、getLineと同様のものを使用する必要があります()...だから私は似たような検索、そしてこれは私が見つけたコードです:Javaエラー:デフォルトコンストラクタで例外タイプFileNotFound例外を処理できません

File inFile = new File("textfile.txt"); 
FileInputStream fstream = new FileInputStream(inFile);//ERROR 
// Get the object of DataInputStream 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

私は「ERROR」とマークされた行は私に、「デフォルトのコンストラクタは、によってスローされた例外の型にFileNotFoundExceptionを扱うことができないというエラーを与えます明示的なコンストラクタを定義しなければなりません。 "

私はこのエラーメッセージを検索しましたが、私が見つけたものはすべて私の状況に無関係です。

+1

あなたのコードをさらに表示できますか?上記で投稿した内容はわかりません。 – jbranchaud

+0

この関連記事を参照してください:[デフォルトのコンストラクタを構築する際に例外を処理することができません:暗黙のスーパーコンストラクタによってスローされるExceptionを入力してください](http://stackoverflow.com/questions/6772709/while-constructing-the-default-constructor-can- not-handle-exception-type-excep)を使用します。 –

+0

エラーメッセージを正確に引用することさえできませんでした。それは問題が何であるかを正確に教えてくれますが、あなたが実際に何があるのか​​を読んでいない場合はそうではありません。 – EJP

答えて

-1

私は、textfile.txtが存在しないか、現在のディレクトリにないと言います。

したがって、存在しないファイルにFileInputStreamを作成しようとしています。

は、ファイル上の

System.out.println(inFile.getAbsolutePath() + " " + inFile.exists()); 

をやってみてください、あなたは試してみて、それを使用する前に、それが存在しないことを確認してください。

+2

私は問題がコンパイラのエラーだと思います(上記のコードはコンストラクタに貼り付けられていると思われます) - ランタイム 'ファイルは存在しません'というエラーではありません。 – ptyx

5

どちらかFileNotFoundExceptionを投げるあなたのサブクラスで明示的なコンストラクタを宣言:

public MySubClass() throws FileNotFoundException { 
} 

またはその代わりにFileNotFoundException例外をスローするのtry-catchブロックを使用して、基本クラスのコードを囲む:

public MyBaseClass() { 
    FileInputStream fstream = null; 
    try { 
     File inFile = new File("textfile.txt"); 
     fstream = new FileInputStream(inFile); 
     // Get the object of DataInputStream 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     // Do something with the stream 
    } catch (FileNotFoundException ex) { 
     Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     try { 
      // If you don't need the stream open after the constructor 
      // else, remove that block but don't forget to close the 
      // stream after you are done with it 
      fstream.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

無関係にJavaアプレットをコーディングしているので、IO操作を実行するにはsign itが必要であることに注意してください。

1

あなたは次のようにtryおよびcatchを使用して、コードを囲む必要があります。

try { 
    File inFile = new File("textfile.txt"); 
    FileInputStream fstream = new FileInputStream(inFile);//ERROR 
} catch (FileNotFoundException fe){ 
    fe.printStackTrace(); 
} 
// Get the object of DataInputStream 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
+0

Adel、 'fstream'はこのようなコードを書くと' DataInputStream'コンストラクタには見えません。あなたのコードをリファクタリングし、私の例のようにtryブロックの外側に 'fstream'を参照してnullを持たせる必要があります。また、ブロック全体をtry/catch文で囲むわけではないので、 'in'と' br'変数を宣言する前に 'fstream!= null'をチェックすることは悪い考えではありません。 –

+0

@AnthonyAccioly私は完全な解決策を提示していませんでした。私はあなたに手がかりを与えました。試行錯誤は、上記のエラーを引き起こす可能性のあるすべての行を囲むべきです。悲しいことに、私はどのラインがそれをするのかを確認しなかった。それはあなたの利便性でそれを使用することはあなた次第です:) –

0

我々は完全なコードを持っていないので、これは推測です。 Javadocのから

:(ファイルファイル) 公共FileInputStreamのは、それはあなたが()新しいのFileInputStreamを行うときに、あなたがやるように、それが戻ってFileNotFoundExceptionで来ることができることを意味してFileNotFoundException

スローします。これはチェックされた例外です。つまり、新しいメソッドを実行するメソッドで 'throw FileNotFoundException'を追加するか、catch(他のtry/catchレスポンスを参照)する必要があります。