2013-07-11 183 views
-1

有人可以帮我解决这个问题吗?Java:检查文件是否存在

我有一个方法,当运行时生成一些文件。这些文件可能需要几秒钟到几分钟的时间才能生成,所以每次我尝试查看文件夹中的文件数量时,不要等待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

用'File.exists()'方法检查文件 – 2013-07-11 10:01:22

+0

'File f = new File(generatedFilesFolder);'then'currentFilesGenerated =(f.exists()== false) - 1:f.listFiles()。length' – 2013-07-11 10:03:30

回答

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 
} 
+0

如果'generatedFilesFolder'命名一个文件夹,可能是'f.mkdir()'。 – johnchen902

+0

@ johnchen902是的,我已经更新了答案。感谢您提出 – sanbhat

0

你可以使用存在的情况下()File类的方法来检查,如果该文件存在, 例如

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

exist方法。因此,在您获取文件列表之前,请检查是否存在默认设置。

0

在使用它之前进行检查。

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

的问题是它运行时,它得到新的文件(generatedFilesFolder).listFiles()长度第一次。它会抛出一个空指针异常,因为此时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。其中有一个目录观察者...