我必须编写一个给出深度的程序,它必须列出该深度的所有现有文件和目录。到目前为止,这是代码:
static String path = "path";
static int depth = X;
static ArrayList<String> filesindepth = new ArrayList<String>();
public static ArrayList<String> Filescanner(File files[], int depth)
{
if (depth > 0) {
for (File file : files)
{
if (file.isDirectory())
{
Filescanner(file.listFiles(), depth - 1);
}
if (depth==1) filesindepth.add(file.getAbsolutePath());
}
}
return filesindepth;
}
public static void main(String[] args) {
File[] file = new File(path).listFiles();
Pfadscanner(file, depth);
for (String files: filesindepth)
{
System.out.println(files);
}
}
如果我使用深度1,代码工作正常,但是当使用更高的深度时,它只列出上一个文件夹中最后找到的目录中的文件,我想要该深度中所有目录和文件的列表(即使他们在不同的目录)。有人能告诉我我做错了什么吗?提前谢谢。
编辑:我们说我的结构如下:
程序应该显示Subdirectory1.1,Subdirectory1.2和Subdirectory2,1的绝对路径。
编辑由于@Ferrybig和@ m.yadav,问题解决了。最终的代码如上所示。
答案 0 :(得分:1)
filesindepth.add(file.getAbsolutePath()); Filescanner(file.listFiles(), depth-1);
您忽略了对递归fileScanner
的调用。
如果使用递归方法,则应确保在中心位置正确收集其他方法的结果。
在您的情况下,您可以通过将Collection.addAll
称为:
filesindepth.add(file.getAbsolutePath());
filesindepth.addAll(Filescanner(file.listFiles(), depth-1));
static ArrayList<String> filesindepth;
为什么这个变量是静态的?它至少应限定为Filescanner
方法,这样你就可以在它上面构建。
public static ArrayList<String> Filescanner(File files[], int depth)
{
ArrayList<String> filesindepth = new ArrayList<String>();
if (depth>0)
{
for (File file: files)
{
if(file.isDirectory())
{
filesindepth.add(file.getAbsolutePath());
filesindepth.addAll(Pfadscanner(file.listFiles(), depth-1));
}
}
}
return filesindepth;
}
Filescanner(file, depth); for (String files : filesindepth) { System.out.println(files); }
你应该从方法中获取一个列表,然后从该调用处理方法,这是OOP的方法。
ArrayList<String> filesindepth = Filescanner(file, depth);
for (String files : filesindepth) {
System.out.println(files);
}
答案 1 :(得分:0)
您正在每次调用filesindepth
Filescanner()
列表
在您的情况下应该只有一次。更新了运行代码
static String path = "/tmp/aa";
static int depth = 3;
// initialize 'filesindepth' only once here..
static ArrayList<String> filesindepth = new ArrayList<String>();
public static ArrayList<String> Filescanner(File files[], int depth) {
if (depth > 0) {
for (File file : files) {
filesindepth.add(file.getAbsolutePath());
if (file.isDirectory()) {
Filescanner(file.listFiles(), depth - 1);
}
}
}
return filesindepth;
}
public static void main(String[] args) {
File[] file = new File(path).listFiles();
Filescanner(file, depth);
for (String files : filesindepth) {
System.out.println(files);
}
}
对于目录结构:
tmp
'--aa
|-- bb
'-- cc
'-- dd
输出就像:
的/ tmp / AA / BB
的/ tmp / AA /立方厘米
的/ tmp / AA /立方厘米/ DD