列出目录的最有效方法是什么?

时间:2013-12-10 00:46:54

标签: java file io

所以我的标题可能不是最具描述性的,但实际上我在一个课程中这样做:

  • 启动创建一系列文件的perl脚本
  • 在同一个类中的另一个函数中,我想将我从第一个脚本创建的某些文件配置到另一个脚本中

    //process 1
    launchOnCommandLine("perl --arg1 -arg2");
    

上述脚本的作用是,它在当前工作目录中生成一堆文件。在第二个脚本中,我希望能够检索扩展名(.example)的所有输出文件,检索它们的路径,将它们连接到逗号分隔的列表中,然后将其提供给第二个脚本。

    //process 2
    launchSecondScript("perl --list-of-comma-seperated-file paths

检索该逗号分隔的文件路径字符串并将其提供给第二个函数的最有效方法是什么。我也知道输出文件的目录,这不是问题。

2 个答案:

答案 0 :(得分:2)

我可能会使用一个简单的Java函数来执行此操作

private static String concatenateFilePaths(
    String directory, String extension) {
  StringBuilder sb = new StringBuilder();
  File f = new File(directory);
  if (f != null && f.isDirectory()) {
    File[] files = f.listFiles();
    for (File file : files) {
      if (file != null
          && file.getName().endsWith(extension)) {
        if (sb.length() > 0) {
          sb.append(", ");
        }
        sb.append('"');
        sb.append(file.getPath());
        sb.append('"');
      }
    }
  }
  return sb.toString();
}

然后我可能会这样使用它

System.out.println(concatenateFilePaths("/tmp/test/",
    ".example"));

在我的系统ls /tmp/test

a.example  b.example  c

以上电话的结果

"/tmp/test/a.example", "/tmp/test/b.example"

答案 1 :(得分:2)

类似于Elliot的回复,这里是一个java7(nio)版本

public static String listFiles(String dir, String extensionToMatch){

    StringBuilder fileList = new StringBuilder();

    try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get(dir))) {
        for (Path path : directoryStream) {
            if(path.toString().endsWith(extensionToMatch)){
                if(fileList.length() != 0){
                    fileList.append(",");
                }
                fileList.append(path.toString());
            }
        }
    } catch (IOException ex) {}

    return fileList.toString();
}