-1

重複の可能性:
「例外」が発生するのはなぜですか。Javaコードをコンパイルしようとすると、キャッチまたはスローされるように宣言する必要がありますか?

私の最初の問題を解決してくれてありがとう、私は今新しいエラーを受け取っています

import java.io.*;
import javax.swing.*;

public class FileBrowser {
    public static void main(String[] args) throws IOException {

        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        String filename = file.getName();
        System.out.println("You have selected: " + filename);

        FileReader fr = new FileReader("filename"); 
        BufferedReader br = new BufferedReader(fr); 
        String s; 
        while((s = br.readLine()) != null) { 
            System.out.println(s); 
        } 
        fr.close(); 
    }
}

エラー :

java.io.FileNotFoundException: filename (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:97)
    at java.io.FileReader.<init>(FileReader.java:58)
    at FileBrowser.main(FileBrowser.java:13)

ファイルブラウザからファイル名を正しく取得していない場合のエラーですか?

4

3 に答える 3

9

Javaには、チェックされている例外とチェックされていない例外があります。メソッドがスローするチェック済みの例外を宣言する必要があります。FileReaderコンストラクターFileNotFoundException、チェックされた例外であるaをスローできます。コード内の他のメソッド呼び出しの一部も、チェックされた例外をスローする可能性があります。

チェックされた例外をスローできるメソッドを呼び出す場合は、例外をキャッチして処理するか、メソッドがこの例外をスローすることを宣言する必要があります。例外がスローされないと思われる場合でも、これらのいずれかを実行する必要があります。そうしないと、コンパイルエラーになります。

:を追加しthrowsます

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

または、コードをtry/catchブロックで囲みます。

try {
    // ...
} catch (IOException e) {
    e.printStackTrace();
    // Or ask the user for a different filename...
}
于 2012-12-22T00:11:44.673 に答える
1

サラウンドFileReader fr = new FileReader("filename"); 次のように試してキャッチしてください:

try {
     FileReader fr = new FileReader("filename"); 
} catch (Exception e) {
    System.out.println("Error: " + e);
}
于 2012-12-22T00:12:00.570 に答える
0

AdelBoutronsとMarkByersに加えて 答えます。また、いくつかの変更を加える必要があります。

まず、ファイルチューザーを選択しているので、

   String path = file.getAbsolutePath();

これにより、ファイル名を含むファイルの絶対パスがわかります。

   FileReader fr = new FileReader("filename"); 

ここでは、ファイル名を指定せず、文字列のみを指定し、「filename」を削除します。

    FileReader fr = new FileReader(path.replace("\\", File.separator)); 

ファイルが見つからない場合は、FileNotFoundExceptionがスローされます。

于 2012-12-22T00:24:41.540 に答える