Java:检查文件是否存在

时间:2013-07-11 09:57:18

标签: java file-io nullpointerexception while-loop try-catch

有人可以帮我解决这个问题吗?

我有一个方法,在运行时生成许多文件。这些文件可能需要几秒到一分钟的生成时间而不是每次只等待2分钟我试图查看文件夹中的文件数量,然后每隔2秒检查一次文件计数上去。

如果文件计数在2分钟内没有增加,我只想继续使用方法的其余部分而不是抛出异常并退出。

问题是它第一次运行到new File(generatedFilesFolder).listFiles().length;时会抛出空指针异常,因为此时generatedFilesFolder为空。

我可以在generate.next()之后执行此检查,但之后我将不得不睡觉,这会破坏我想要存档的点。

请有人能告诉我一个更好的方法吗?我尝试将int更改为Integer,但它仍然引发异常。

int actualFilesGenerated = new File(generatedFilesFolder).listFiles().length;
generate.next();
// / Now I want to give each file 2 minutes to generate otherwise catch and
// carry on with rest of method.
try {
  int currentFilesGenerated = new File(generatedFilesFolder).listFiles().length;
  int counter = 0;
  while ((currentFilesGenerated < actualFilesGenerated) & counter < 120) {
    Thread.sleep(1000);
    currentFilesGenerated = new File(generatedFilesFolder).listFiles().length;
    counter++;
    System.out.println("actualFilesGenerated: " + actualFilesGenerated
        + " currentFilesGenerated: " + currentFilesGenerated + "counter: "
        + counter);
  }
} catch (InterruptedException e1) {
  e1.printStackTrace();
}
///rest of method here 

5 个答案:

答案 0 :(得分:3)

您可以使用File.exists()检查是否存在File

File f = new File(generatedFilesFolder)
if(f.exists()) {
   // file exists and do the operation
}
else {
   f.createNewFile(); //or f.mkdir() to create directory
} 

答案 1 :(得分:1)

  

问题是它第一次运行时遇到新文件(generatedFilesFolder).listFiles()。length;它抛出一个空指针异常,因为此时generatedFilesFolder为空。

这不可能是真的。如果generatedFilesFolder实际上是目录的路径,但是没有文件,那么这不会抛出NPE,但会返回一个空数组。

因此,您需要在继续之前生成目录:

final File file = new File(generatedFilesFolder);

if (file.exists()) {
    if (!file.isDirectory())
        throw new IllegalStateException("not a directory");
} else {
    if (!files.mkdirs())
        throw new IllegalStateException("cannot create directory");
}

// go on

最后:如果您使用Java 7,请忘记File。使用Files。哪个有目录观察者......

答案 2 :(得分:0)

您可以使用File类的exists()方法来检查该文件是否存在, e.g。

File f=new File(path);
if(f.exists()) {
    .....
}

答案 3 :(得分:0)

exist方法。在获取文件列表之前检查目录是否存在

答案 4 :(得分:0)

在使用它之前进行检查。

File file = new File(generatedFilesFolder);
if(file.exists() && file.isDirectory()) {
        // do something 
}