即使文件存在,file.exists()方法也会返回false

问题描述:

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

    } 
} 
} 

有人请告诉我的问题及其解决方案背后的原因。
在此先感谢。

+0

'dir_content = f.list();'如果应用程序。处理'File'实例,不要使用'String'实例。请参阅['File.listFiles()'](http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles%28%29)。 – 2013-03-18 12:38:52

您的逻辑正确,但File.list不符合您的想法。它returs文件名,而不是其完整路径的列表,所以你需要做的是这样的:

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

正确地创建的文件路径(您想给定目录内的文件“FILE1.TXT”) 。

+0

参见['File.listFiles()'](http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles%28%29)。 – 2013-03-18 12:39:43

+0

是的,它可以工作,谢谢。 – user2181750 2013-03-18 12:53:35

dir_content [i]只有目录名,所以当你构建File对象时,它只有Directory的名称而不是整个路径,所以这就是为什么你会得到一个false。

所以,如果你做这样的事应该让你真正:

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