【问题标题】:file.exists() method returns false even if file exists即使文件存在,file.exists() 方法也会返回 false
【发布时间】:2013-03-18 12:16:56
【问题描述】:

我创建了一个程序来显示目录中存在的所有文件和子目录,目录名称作为参数从 cmd 命令行中传递。
第一个 if 条件 (if(f.isDirectory())) 检查给定参数是否为目录,但工作正常。
然后我使用 dir_content = f.list() 的 File.list() 方法将目录中所有文件名的列表存储在 String dir_content 数组中。
然后在 for 循环中,每次为存储在 File f1 = new File(dir_content[i]) 的字符串数组 dir_content 中的每个文件名创建一个新文件对象,然后检查是否存在文件是使用 if(f1.exists()) 的 exists() 方法创建的。
现在的问题是 f1.exists 为许多文件返回 false,尽管它们存在于给定目录中。它显示了一些文件,而且不显示子目录。
下面是我的程序代码:-

import java.io.File;
class FileDemo1
{
 public static void main(String[] a)
 {
  File f = new File(a[0]);
  String[] dir_content;   

  if(f.isDirectory())
  {
    System.out.print(f.getName()+" is a directory containing ");
    dir_content = f.list();

    for(int i=0;i<dir_content.length;i++)
    { 
        File f1 = new File(dir_content[i]);
        if(f1.exists())
        {
         System.out.print("\n\t: "+f1.getName());
         System.out.print("    "+f1.isFile());
         System.out.print("    "+f1.isDirectory());
        }
    }   

  }
 } 
}

请告诉我问题背后的原因及其解决方案。
提前致谢。

【问题讨论】:

  • dir_content = f.list(); 如果应用程序。处理File 实例,不要对String 实例进行处理。请参阅File.listFiles()

标签: java file-io


【解决方案1】:

您的逻辑是正确的,但File.list 并没有按照您的想法行事。它返回文件名列表,而不是它们的完整路径,因此您需要执行以下操作:

 File f1 = new File(f,dir_content[i]);

正确创建文件路径(您希望给定目录中的文件“file1.txt”)。

【讨论】:

【解决方案2】:

dir_content[i] 将只有目录名称,因此当您构造 File 对象时,它将只有目录的名称而不是整个路径,这就是您得到错误的原因。

所以如果你做这样的事情它应该给你真实的:

  File f1 = new File(f.getPath() + dir_content[i]);   ///f being a directory

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2012-05-13
    • 2010-10-29
    • 2012-10-22
    相关资源
    最近更新 更多