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的方法不存在。有关详细信息,请参阅字符串文档。如果您想根据路径检查文件是否存在,您应该使用PathwithFiles来验证文件是否存在。

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

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

关于该课程的一些教程PathOracle 教程
和一篇关于如何在 Java 7 中操作文件的博客文章

对您的代码的建议
我将向您指出有关try-with-resources的教程,因为它可能对您有用。我还想提请您注意Files#readAllLines,因为它可以帮助您减少读取操作的代码。基于此方法,您可以使用 for-each 循环将文件的所有行添加到JTable.

于 2013-07-16T13:31:06.350 回答
3

您可以使用此代码检查文件是否存在

使用java.io.File

File f = new File(filePathString);
if(f.exists()) { /* do something */ }
于 2013-07-16T13:28:49.167 回答
2

如果您想确保可以从文件中读取,甚至可能适合使用:

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

作为条件,为了验证文件存在并且您有足够的权限从文件中读取。

链接到 canRead() javadoc

于 2013-07-16T13:36:37.450 回答
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 回答