如何检查是不是不存在其他文件[重复]
Posted
技术标签:
【中文标题】如何检查是不是不存在其他文件[重复]【英文标题】:How do I check if no other files exist [duplicate]如何检查是否不存在其他文件[重复] 【发布时间】:2016-06-12 09:56:16 【问题描述】:我从名称为file 1.pdf
、file 2.pdf
等的文件夹中加载了一些文件
我想将它们全部加载到我的程序中。如果我更新它们的总数,我会这样做:
for(int i=1; i<=100; i++)
File pdfFile = new File("file "+i+".pdf");
//...
但我不知道总数..如果没有其他文件,会是什么条件,然后退出?
do
File pdfFile = new File("file "+i+".pdf");
//...
while(//there are files...)
【问题讨论】:
【参考方案1】:有两种方法 - 你可以简单地增加你的计数器,直到你得到一个不存在的文件,即
int i = 1;
File file;
while((file = new File("file "+i+".pdf")).exists())
// do whatever
++i;
恕我直言不那么笨拙的方法是简单地遍历特定目录中的所有文件,并忽略那些名称与您的模式不匹配的文件(也就是说,除非您处理文件的顺序很重要)。
【讨论】:
这是如何工作的?因为.exists()
返回一个布尔值?编辑:啊,我知道它应该如何工作了,但是您缺少)
。
@martijnn2008 exists
如果文件存在则返回 true,是的。这依赖于这样一个事实,即 Java 中的赋值,就像在 C 和 C++ 中一样,实际上是一个带有值而不是语句的表达式(具体来说,它具有被赋值的值)。【参考方案2】:
如果您有权访问依赖项 Apache Commons IO,您的代码将如下所示:
File dir = new File("C:\\Users\\your.directory\\");
FileFilter fileFilter = new WildcardFileFilter("file *.pdf");
File[] files = dir.listFiles(fileFilter);
for(File file : files)
System.out.println(file.getAbsolutePath());
【讨论】:
关闭,但不完全。他的问题让他遍历“文件.pdf”,而您的问题将遍历“file .pdf”此外,他似乎希望他的数字是连续的。当然,如果实际意图只是遍历目录中的所有 pdf,这是有效的。 那是真的...而且似乎我不能在通配符过滤器中使用正则表达式...【参考方案3】:您可以捕获异常并中断 while 循环。原来我是这样回答的:
boolean success = true;
int i = 0;
while(success)
i = i + 1;
try
File pdfFile = new File("file " + i + ".pdf");
catch(FileNotFoundException ex)
success = false;
但有人告诉我构造函数不会抛出异常,所以这行不通。因此,您最好使用下面的答案,正如另一位用户 (@cubic) 所建议的那样。
int i = 0;
File file;
while((file = new File("file " + i + ".pdf")).exists())
// something with file
i++;
【讨论】:
这似乎没有帮助。当文件不存在时构造函数不会抛出异常(参见***.com/questions/1816673/…) 啊,我不知道!我会编辑这个。 你第二部分的答案已经被别人给了,一开始是错的。 编辑解释了为什么我的方法不起作用(并接受了您的编辑并感谢正确的答案)。【参考方案4】:你应该计算文件夹中的文件数
new File(<directory path>).listFiles().length
【讨论】:
如果目录中有其他文件(例如不是pdf)则不起作用以上是关于如何检查是不是不存在其他文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章