有人可以帮我解决这个问题吗?
我有一个方法,在运行时生成许多文件。这些文件可能需要几秒到一分钟的生成时间而不是每次只等待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
答案 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
}