我创建了一个程序来显示目录中存在的所有文件和子目录,目录名称作为参数从cmd中的命令行传递。
检查给定参数是否为目录的第一个 if 条件( if(f.isDirectory()))正常工作。
然后我使用 dir_content = f.list()的File.list()方法将目录中所有文件名的列表存储在String dir_content数组中。
然后在for循环中,每次为存储在String数组dir_content中的每个文件名创建一个新文件对象,该文件名为文件f1 =新文件(dir_content [i]),然后检查是否存在file是使用exists()方法生成的,如果(f1.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());
}
}
}
}
}
有人请告诉我问题背后的原因及其解决方法 提前谢谢。
答案 0 :(得分:2)
你的逻辑是正确的,但File.list没有按照你的想法行事。它会返回文件名列表,而不是它们的完整路径,因此您需要执行以下操作:
File f1 = new File(f,dir_content[i]);
正确创建文件路径(您希望给定目录中的文件“file1.txt”)。
答案 1 :(得分:0)
dir_content [i]只有目录名,所以当你构造File对象时,它只会有Directory的名称而不是整个路径,所以这就是你得到错误的原因。
所以,如果你做这样的事情,它应该给你真实的:
File f1 = new File(f.getPath() + dir_content[i]); ///f being a directory