2

csv ファイルを読み取り、内容を JList に表示する小さなアプリを作成しています。

私の現在の問題は、new FileReader(file)コードがjava.io.FileNotFoundExceptionエラーを出し続けていることであり、その理由はよくわかりません。

loadFile.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent actionEvent)
            {
                JFileChooser fileChooser = new JFileChooser();
                fileChooser.setCurrentDirectory(new File("~/"));

                if (fileChooser.showOpenDialog(instance) == JFileChooser.APPROVE_OPTION)
                {
                    File file = fileChooser.getSelectedFile();
                    CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath()));
                    fileLocation.setText(file.getAbsolutePath());

                }
            }
        });
4

2 に答える 2

5
new File("~/")

~ホームディレクトリのシェルショートカットです。次のような絶対パスを使用します

new File("/home/myself/")

@pickypgで指摘されているように、JFileChooser.setCurrentDirectory()は、渡されたディレクトリが無効な場合、ユーザーのホームディレクトリをデフォルトとして設定します。したがって、シェルのようにFile()解釈されなくても、ユーザーのホームディレクトリで開始されます。ただし、これは、たとえば、存在しないディレクトリの場合に当てはまります。~JFileChooser

new File("/Windows")   // JFileChooser would start in "\Windows"
new File("/xWindows")   // JFileChooser would start in the user's home directory

ドキュメントに記載されているように、ユーザーのホームディレクトリはシステム固有ですが、MSWindowsでは通常「マイドキュメント」フォルダです。

ただし、「〜/」のような存在しないパスを使用する場合でもJFileChooser.getSelectedFile()、適切なパスを返すため、。FileReader()をスローしないでくださいFileNotFoundException


コメントに基づくと、問題は実行時の例外ではなく、例外がキャッチされないコンパイル時のエラーであることがわかります。コンストラクターのtry{}catch{}周りにブロックを追加します。FileReader()

try {
    CSVReader reader = new CSVReader(new FileReader(file.getAbsolutePath()));
}catch(FileNotFoundException fnfe) {
    // handle exception, e.g. show error message
}
于 2013-02-01T08:29:49.807 に答える
1

問題が実際にその行にあり、Andreasが指摘している場所ではない場合は、パスを与えるのではなく、でFileReader直接構築します。file

new FileReader(file)
于 2013-02-01T08:30:51.280 に答える