4

これは、*.txt ファイル内の特定のテキストを読み取ろうとするときに使用するコードです。

public void readFromFile(String filename, JTable table) {

        BufferedReader bufferedReader = null;

        try {
            bufferedReader = new BufferedReader(new FileReader(filename));
            String a,b,c,d;
            for(int i=0; i<3; i++)
            {
              a = bufferedReader.readLine(); 
              b = bufferedReader.readLine(); 
              c = bufferedReader.readLine(); 
              d = bufferedReader.readLine(); 
              table.setValueAt(a, i, 0);
              table.setValueAt(b, i, 1);
              table.setValueAt(c, i, 2);
              table.setValueAt(d, i, 3);
            }

        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            //Close the reader
            try {
                if (bufferedReader != null) {
                    bufferedReader.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

そして、次のように呼び出されます。

readFromFile("C:/data/datafile.txt", table1)

問題は次のとおりです。プログラムを初めて開いたときに、読み取る予定の *.txt ファイルが存在しないため、関数を使用できると思いましたexists()。私は何をすべきかわかりませんが、これを試しました:

if(("C:/data/datafile.txt").exists()) {
readFromFile("C:/data/datafile.txt", table1)
}

NetBeans で多くのエラーが発生するため、機能していません。どうすればこれを修正できますか?

4

5 に答える 5

23

Stringには名前の付いたメソッドがありませんexists()(また、名前が付けられていたとしても、必要なことは実行されません)。これが、IDE によって報告されるエラーの原因になります。

のインスタンスを作成し、インスタンスで呼び出しFileます。exists()File

if (new File("C:/data/datafile.txt").exists())
{
}
于 2013-07-16T13:27:44.313 に答える
9

注: この回答では、Java 7 より前のバージョンでは使用できないクラスを使用しています。

exists()オブジェクトStringのメソッドが存在しません。詳細については、文字列のドキュメントを参照してください。パスに基づいてファイルが存在するかどうかを確認する場合は、 with を使用PathFilesてファイルの存在を確認する必要があります。

Path file = Paths.get("C:/data/datafile.txt");

if(Files.exists(file)){
   //your code here
}

Pathクラス に関するいくつかのチュートリアル: Oracle チュートリアルおよびJava 7 でファイルを操作する方法
に関するブログ投稿

コードの提案: try-with-resources
に関するチュートリアルが役立つ可能性があるため、紹介します。また、 Files#readAllLinesにも注意を向けたいと思います。これは、読み取り操作のコードを減らすのに役立つ可能性があるためです。この方法に基づいて、for-each ループを使用して、ファイルのすべての行を.JTable

于 2013-07-16T13:31:06.350 に答える
2

実際の File オブジェクトを指定する必要があります。あなたは正しい道を進んでいますが、NetBeans (および Java) は '("C:/data/datafile.txt")' が何であるかを認識していません。

おそらくそこでやりたかったことはjava.io.File、次のように、その文字列を引数として使用してオブジェクトを作成することでした。

File file = new File ("C:/data/datafile.txt");
if (file.exists()) {
   readFromFile("C:/data/datafile.txt", table1);
}

また、readFromFile通話の最後にセミコロンがありませんでした。それが単なるタイプミスかどうかはわかりませんが、それも確認する必要があります。

存在を確認するためだけにこのFileオブジェクトを使用していることがわかっている場合は、次のこともできます。

if (new File("C:/data/datafile.txt").exists()) {
   readFromFile("C:/data/datafile.txt", table1);
}
于 2013-07-16T13:35:06.667 に答える
2

ファイルから読み取ることができることを確認したい場合は、以下を使用するのが適切かもしれません:

if(new File("C:/data/datafile.txt").canRead()){
    ...
}

条件として、ファイルが存在し、ファイルから読み取るための十分な権限があることを確認します

canRead() javadoc へのリンク

于 2013-07-16T13:36:37.450 に答える