サブディレクトリ内を含むファイル一覧を取得するサンプル †Javaで指定したディレクトリ内のファイル一覧を取得するサンプルソースです。 関連記事 †サンプルソース †getFileList()メソッドを再帰呼出しすることにより、サブディレクトリ内のファイル一覧を取得しています。 java RecursiveFileList ディレクトリ [サブディレクトリの深さ・省略可能] 使用例として以下のようになります。 java RecursiveFileList . 1 上記の例では、カレントディレクトリで深さ=1なので、サブディレクトリを検索しません。 java RecursiveFileList . 深さを指定しないと、カレントディレクトリ以下のファイルやディレクトリすべてを表示します。 java RecursiveFileList . 2 カレントディレクトリとカレントディレクトリ内のサブフォルダ内ファイルまでが対象となります。 import java.io.File; import java.util.List; import java.util.ArrayList; class RecursiveFileList { int depth; String directory; private static void usage() { System.err.println("Usage: java RecursiveFileList <path> [depth]"); System.exit(1); } private static boolean isNum(String v) { boolean b = true; try { Integer.parseInt(v); } catch (NumberFormatException e) { b = false; } return b; } private int getDepth() { return this.depth; } private void setDepth(int d) { this.depth = d; } private void setDirectory(String d) { this.directory = d; } private String getDirectory() { return this.directory; } private List<File> getFileList(String dir, List<File> fileList, int dirDepth) { File f = new File(dir); File[] fl = f.listFiles(); if (fl != null) { for (File item : fl) { fileList.add(item); if (item.isDirectory()) { if ((getDepth() > (dirDepth+1)) || (getDepth() == 0)) { getFileList(dir + System.getProperty("file.separator") + item.getName(), fileList, dirDepth+1); } } } } return fileList; } RecursiveFileList(String dir, int depth) { setDepth(depth); setDirectory(dir); } public static void main(String[] args) { int depth = 0; // check arguemnts if ((args.length !=1) && (args.length !=2)) { usage(); } // check numeric if (args.length == 2) { if (!isNum(args[1])) { System.err.println(args[1] +" is not numeric."); usage(); } if (Integer.parseInt(args[1]) < 0) { System.err.println("Please enter a number greater than 1."); usage(); } depth = Integer.parseInt(args[1]); // sub directory depth } // directory ? File f = new File(args[0]); if (!f.exists()) { // false System.out.println(args[0] + " directory is not found."); System.exit(2); } if (f.isFile()) { System.out.println(args[0] + " is file, Please set the directory."); System.exit(3); } if(!f.isDirectory()) { System.out.println(args[0] + " is unknown, Please set the directory."); System.exit(4); } RecursiveFileList me = new RecursiveFileList(args[0], depth); List<File> fileList = new ArrayList<File>(); me.getFileList(args[0], fileList, 0); for (File fitem : fileList) { System.out.println(fitem.getPath()); } } } 実行結果 †コンパイルして実行してみます。
以上、再帰呼出を使った指定したディレクトリ以下サブディレクトリ内ファイルを含む |