【问题标题】:How to store list of files and folder in list or set using java?如何将文件和文件夹列表存储在列表中或使用java设置?
【发布时间】:2016-10-14 03:02:35
【问题描述】:

我有返回代码来检索目录中所有文件路径的列表,但我只获取最后一个文件夹的内容。我有两个文件夹,每个文件夹有 3 个文件。

这是我的代码:

import java.io.*;
import java.util.*;

class Filedirexts 
{
    public static void main(String[] args) throws IOException
    {
        String Dirpath = "E:/Share/tstlpatches";
        String fieldirpath ="";
        File file = new File(Dirpath);
        List<String> strfilelst = new ArrayList<String>();
        strfilelst = Filedirexts.getsubdir(file);
        System.out.println(strfilelst.size());

        for(int i=0;i<strfilelst.size();i++)
        {
            fieldirpath = strfilelst.get(i);
            System.out.println("fieldirpath : "+fieldirpath);
        }
    }

    public static List<String> getsubdir(File file) throws IOException
    {
        File[] filelist = file.listFiles();
        List<String> strfileList = new ArrayList<String>();
        System.out.println("filelist" + filelist.length);

        for (int i=0; i< filelist.length ; i++)
        {
            if(filelist[i].exists())
            {
                if(filelist[i].isFile())
                {
                    file = filelist[i];
                    System.out.println( " fileeach file : "+fileeach.getAbsolutePath());
                    strfileList.add(file.getAbsolutePath());
                }
                else if (filelist[i].isDirectory())
                {
                    file = filelist[i];
                    System.out.println( " fileeach Directory : "+fileeach.getCanonicalPath());
                    strfileList = Filedirexts.getsubdir(file);
                    strfileList.add(file.getCanonicalPath().toString());
                }
            }
        }
        return strfileList;
    }
}

这是我的文件夹结构: MainPath E:\Share\tstlpatches 用于代码本身

E:\Share\tstlpatches\BE 
E:\Share\tstlpatches\BE\graphical
E:\Share\tstlpatches\BE\graphical\data1.txt
E:\Share\tstlpatches\BE\graphical\data2.txt
E:\Share\tstlpatches\BE\graphical\data3.txt
E:\Share\tstlpatches\BE\test 
E:\Share\tstlpatches\BE\test\1.txt
E:\Share\tstlpatches\BE\test\2.txt
E:\Share\tstlpatches\BE\test\readme.txt

我只是得到

E:\Share\tstlpatches\BE 
E:\Share\tstlpatches\BE\test
E:\Share\tstlpatches\BE\test\1.txt 
E:\Share\tstlpatches\BE\test\2.txt
E:\Share\tstlpatches\BE\test\readme.txt

如果我使用普通方法,它可以正常工作,但是当我使用列表时,我只能获取最后一个文件夹的内容。

我需要做什么才能使代码正常工作?

【问题讨论】:

  • strfileList = Filedirexts.getsubdir(file); 正在覆盖整个以前的值你想要什么?

标签: java file-io file-handling


【解决方案1】:

您的递归方法在每次调用中错误地创建了一个新的ArrayList&lt;String&gt;,并在每次调用中返回了这个新的ArrayList。这就是为什么您只能看到最后一次通话的内容。

以下是解决此问题的方法:

1) 将 getsubdir 更改为 void 并作为参数传入 List。

public static void getsubdir(File file, List<String> strfileList) throws IOException
{
    File[] filelist = file.listFiles();
    System.out.println("filelist " + filelist.length);

    for (int i=0; i< filelist.length ; i++)
    {
        if(filelist[i].exists())
        {
            if(filelist[i].isFile())
            {
                file = filelist[i];
                System.out.println( " fileeach file : "+file.getAbsolutePath());
                strfileList.add(file.getAbsolutePath());
            }
            else if (filelist[i].isDirectory())
            {
                file = filelist[i];
                System.out.println( " fileeach Directory : "+file.getCanonicalPath());

                // Note: Since you want the directory first in the list, 
                // add it before the recursive call
                strfileList.add(file.getCanonicalPath().toString());
                Filedirexts.getsubdir(file, strfileList);
            }
        }
    }
}

2) 改变你从 main 调用它的方式:

代替:

strfilelst = Filedirexts.getsubdir(file);

只需使用:

Filedirexts.getsubdir(file, strfilelst);

【讨论】:

  • 是的..!!谢谢好友..它工作正常。 :) 列出所有子文件夹及其文件。
猜你喜欢
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多