2013-12-10 5 views
4

Так мой титул не может быть наиболее описательный, но в основном я делаю это в одном классе:Каков наиболее эффективный способ перечислить каталог?

  • Запуск скрипта PERL, который создает ряд файлов
  • В другой функции в том же классе, я хотел бы предоставление определенных файлов, которые я создал из моего первого сценария в другой сценарий

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

что выше сценарий, является то, что она производит пучок O f в текущем рабочем каталоге. Во втором скрипте я хочу получить все выходные файлы расширения (.example), получить их пути, объединить их в разделенный запятыми список и передать его во второй скрипт.

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

Что является наиболее эффективным способом получить эти разделители-отделена строку путей файлов и предоставлений его на вторую функцию. Я также знаю каталог, в котором будут выводиться файлы, поэтому это не проблема.

ответ

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" 
+0

кажется удивительным. Можно ли гарантировать, что этот код не будет выполняться до того, как файлы будут созданы даже? Потому что, если это произойдет, моя программа, безусловно, бросит исключение IO, поскольку файлы даже не будут существовать. – AspiringGeek

+0

Дождитесь завершения процесса1 или прочитайте [this] (http://stackoverflow.com/q/4941869/2970947). –

2

Подобный ответ Эллиот здесь является 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(); 
} 
Смежные вопросы