/**
* @param filePath
* @param fs
* @return list of absolute file path present in given path
* @throws FileNotFoundException
* @throws IOException
*/
public static List<String> getAllFilePath(Path filePath, FileSystem fs) throws FileNotFoundException, IOException {
List<String> fileList = new ArrayList<String>();
FileStatus[] fileStatus = fs.listStatus(filePath);
for (FileStatus fileStat : fileStatus) {
if (fileStat.isDirectory()) {
fileList.addAll(getAllFilePath(fileStat.getPath(), fs));
} else {
fileList.add(fileStat.getPath().toString());
}
}
return fileList;
}
簡単な例: 次のファイル構造があるとします。
a -> b
-> c -> d
-> e
-> d -> f
上記のコードを使用すると、次のようになります。
a/b
a/c/d
a/c/e
a/d/f
リーフ (つまり、fileNames) のみが必要な場合は、else
ブロックで次のコードを使用します。
...
} else {
String fileName = fileStat.getPath().toString();
fileList.add(fileName.substring(fileName.lastIndexOf("/") + 1));
}
これにより、次のようになります。
b
d
e
f