2015-04-20 32 views
0

我有以下形式的目錄結構:在一個目錄中運行多個文件上的Java程序,輸出具有獨特的名稱

base_directory/level_one_alevel_one_blevel_one_c/

然後在level_one_x的所有那些目錄中有很多後續目錄,即

/level_one_a_1level_one_a_2level_one_a_3...

等了level_one_b & level_one_c

那麼level_one_a_1裏面,我們有更多的還是,即level_one_a_1_Ilevel_one_a_1_IIlevel_one_a_1_IIIlevel_one_a_1_IV...

於是最後的level_one_a_1_IV,以及所有那些在同一級別內,是我要操作的文件。

我想一個較短的方式說,這將是start/one/two/three/*files*

有很多很多的文件,我想處理它們用一個簡單的java程序我寫道:

try 
    { 
     StringBuilder sb = new StringBuilder(); 
     String line = br.readLine(); 

     while (line != null) 
     { 

      sb.append(line); 
      sb.append(System.lineSeparator()); 
      line = br.readLine(); 
     } 
     String everything = sb.toString(); 



     Document doc = Jsoup.parse(everything); 
     String link = doc.select("block.full_text").text(); 
     System.out.println(link); 


    } 
    finally 
    { 
     br.close(); 
    } 

它使用jsoup

我想構建這個腳本,使程序可以自動導航此目錄結構,抓住每個文件,然後用該腳本處理它,使用緩衝讀取器和文件讀取器我想,我怎麼能方便嗎?我嘗試過執行this solution,但我無法啓動它。

理想我想輸出每次一個獨特的名字會處理文件,即是該文件名爲00001.txt它可能保存爲00001_output.txt,但是,這是一個不同的顏色

回答

0

你可以做到這一點還通過使用Java NIO 2 API。

public class ProcessFiles extends SimpleFileVisitor<Path> { 

    static final String OUT_FORMAT = "%-17s: %s%n"; 
    static final int MAX_DEPTH = 4; 
    static final Path baseDirectory = Paths.get("R:/base_directory"); 

    public static void main(String[] args) throws IOException { 
     Set<FileVisitOption> visitOptions = new HashSet<>(); 
     visitOptions.add(FileVisitOption.FOLLOW_LINKS); 
     Files.walkFileTree(baseDirectory, visitOptions, MAX_DEPTH, 
       new ProcessFiles() 
     ); 
    } 

    @Override 
    public FileVisitResult visitFile(Path file, BasicFileAttributes attr) { 
     if (file.getNameCount() <= MAX_DEPTH) { 
      System.out.printf(OUT_FORMAT, "skip wrong level", file); 
      return FileVisitResult.SKIP_SUBTREE; 
     } else { 
      // add probably a file name check 
      System.out.printf(OUT_FORMAT, "process file", file); 
      return CONTINUE; 
     } 
    } 

    @Override 
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attr) { 
     if (dir.getNameCount() < MAX_DEPTH) { 
      System.out.printf(OUT_FORMAT, "walk into dir", dir); 
      return CONTINUE; 
     } 
     if (dir.getName(MAX_DEPTH - 1).toString().equals("level_one_a_1_IV")) { 
      System.out.printf(OUT_FORMAT, "destination dir", dir); 
      return CONTINUE; 
     } else { 
      System.out.printf(OUT_FORMAT, "skip dir name", dir); 
      return FileVisitResult.SKIP_SUBTREE; 
     } 
    } 
} 

假設以下目錄/文件結構

base_directory 
base_directory/base_directory.file 
base_directory/level_one_a 
base_directory/level_one_a/level_one_a.file 
base_directory/level_one_a/level_one_a_1 
base_directory/level_one_a/level_one_a_1/level_one_a_1.file 
base_directory/level_one_a/level_one_a_1/level_one_a_1_I 
base_directory/level_one_a/level_one_a_1/level_one_a_1_I/level_one_a_1_I.file 
base_directory/level_one_a/level_one_a_1/level_one_a_1_II 
base_directory/level_one_a/level_one_a_1/level_one_a_1_II/level_one_a_1_II.file 
base_directory/level_one_a/level_one_a_1/level_one_a_1_III 
base_directory/level_one_a/level_one_a_1/level_one_a_1_III/level_one_a_1_III.file 
base_directory/level_one_a/level_one_a_1/level_one_a_1_IV 
base_directory/level_one_a/level_one_a_1/level_one_a_1_IV/level_one_a_1_IV.file 
base_directory/someother_a 
base_directory/someother_a/someother_a.file 
base_directory/someother_a/someother_a_1 
base_directory/someother_a/someother_a_1/someother_a_1.file 
base_directory/someother_a/someother_a_1/someother_a_1_I 
base_directory/someother_a/someother_a_1/someother_a_1_I/someother_a_1_I.file 
base_directory/someother_a/someother_a_1/someother_a_1_II 
base_directory/someother_a/someother_a_1/someother_a_1_II/someother_a_1_II.file 
base_directory/someother_a/someother_a_1/someother_a_1_III 
base_directory/someother_a/someother_a_1/someother_a_1_III/someother_a_1_III.file 
base_directory/someother_a/someother_a_1/someother_a_1_IV 
base_directory/someother_a/someother_a_1/someother_a_1_IV/someother_a_1_IV.file 

,你會得到下面的輸出(演示)

walk into dir : R:\base_directory 
skip wrong level : R:\base_directory\base_directory.file 
walk into dir : R:\base_directory\level_one_a 
skip wrong level : R:\base_directory\level_one_a\level_one_a.file 
walk into dir : R:\base_directory\level_one_a\level_one_a_1 
skip wrong level : R:\base_directory\level_one_a\level_one_a_1\level_one_a_1.file 
skip dir name : R:\base_directory\level_one_a\level_one_a_1\level_one_a_1_I 
skip dir name : R:\base_directory\level_one_a\level_one_a_1\level_one_a_1_II 
skip dir name : R:\base_directory\level_one_a\level_one_a_1\level_one_a_1_III 
destination dir : R:\base_directory\level_one_a\level_one_a_1\level_one_a_1_IV 
process file  : R:\base_directory\level_one_a\level_one_a_1\level_one_a_1_IV\level_one_a_1_IV.file 
walk into dir : R:\base_directory\someother_a 
skip wrong level : R:\base_directory\someother_a\someother_a.file 
walk into dir : R:\base_directory\someother_a\someother_a_1 
skip wrong level : R:\base_directory\someother_a\someother_a_1\someother_a_1.file 
skip dir name : R:\base_directory\someother_a\someother_a_1\someother_a_1_I 
skip dir name : R:\base_directory\someother_a\someother_a_1\someother_a_1_II 
skip dir name : R:\base_directory\someother_a\someother_a_1\someother_a_1_III 
skip dir name : R:\base_directory\someother_a\someother_a_1\someother_a_1_IV 

一些鏈接到Oralce的教程進一步閱讀
Walking the File Tree
Finding Files

相關問題