【问题标题】:read file system structure from java从java读取文件系统结构
【发布时间】:2012-09-23 05:43:45
【问题描述】:

是否可以读取目录中的所有文件夹名称(不是子文件夹)并将列表保存在ArrayList 等中?

例如,如果目录中有以下文件夹 - CLIENT1、CLIENT2、CLIENT3 等。 我希望ArrayList 是这样的 - [CLIENT1、CLIENT2、CLIENT3 等]。

文件夹位于 unix 服务器中,因此可以使用 java 代码或 shell 脚本 (bash/tcsh/etc) 或它们的组合。

【问题讨论】:

    标签: java shell unix filesystems


    【解决方案1】:

    试试这个:

    File dir = new File("directoryName");
    File temp;
    String[] children = dir.list();
    if (children !=null) {
        for (int i=0; i<children.length; i++) {
            temp = new File(children[i]);
            if(temp.isDirectory()) //add children[i] to arrayList
        }
    }
    

    【讨论】:

    • 将目录中的所有文件/文件夹名称存储在 - String[] children = dir.list();
    【解决方案2】:

    下面的 Java 代码 sn-p 应该可以帮助您。它将返回目录中所有文件夹的列表。它可能会根据您处理任何可能的 IO 异常的方式返回一个空列表。

    public List<String> getDirectoriesInFolder(String folderPath)
    {
         List<String> folderNames = new ArrayList<String>();
         try
         {
             File directory = new File (folderPath);
             String[] allFilesInFolder = directory.list();
             for(String fileName : allFilesInFolder)
             {
                File f = new File(fileName);
                if(f.isDirectory)
                {
                   folderNames.add(fileName);
                } 
    
             }
    
         }
         catch(IOException iex)
         {
              //Do any exception handling here...
         }
         return folderNames; 
    }
    

    如果您想使用 Shell 脚本执行此操作,那么以下链接中提供的指导应该可以帮助您找到解决方案:

    help with script to list directories

    bash: put output from ls into an array

    【讨论】:

      【解决方案3】:

      对我来说,这比每次都构造 new File() 的直率迭代要干净一些。

      public class DirFilter implements FileFilter {
          public static FileFilter INSTANCE = new DirFilter();
          @Override
          public boolean accept(File file) {
              return file.isDirectory();
          }
      }
      
      File startDir = .....;
      List<File> children = Arrays.asList(startDir.listFiles(DirFilter.INSTANCE));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-06
        相关资源
        最近更新 更多