-1

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

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

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

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

我可以在 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 
4

5 回答 5

3

您可以使用File.exists()来检查文件的存在

File f = new File(generatedFilesFolder)
if(f.exists()) {
   // file exists and do the operation
}
else {
   f.createNewFile(); //or f.mkdir() to create directory
} 
于 2013-07-11T10:00:00.367 回答
1

问题是它第一次运行时到达 new File(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. 其中有一个目录观察者......

于 2013-07-11T10:06:35.673 回答
0

存在的方法。因此,在获取文件列表之前检查目录是否存在

于 2013-07-11T10:01:21.320 回答
0

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

File f=new File(path);
if(f.exists()) {
    .....
}
于 2013-07-11T10:00:48.220 回答
0

在使用它之前进行检查。

File file = new File(generatedFilesFolder);
if(file.exists() && file.isDirectory()) {
        // do something 
}
于 2013-07-11T10:02:50.773 回答