/**
* @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
如果你想只有葉(即文件名),使用下面的代碼在else
塊:
...
} else {
String fileName = fileStat.getPath().toString();
fileList.add(fileName.substring(fileName.lastIndexOf("/") + 1));
}
這將給:
b
d
e
f
最後我做了一個比你建議的更簡單的實現,但你給了我這個想法。謝謝! – nik686 2012-07-05 16:47:18
斷開的參考鏈接 – AkD 2015-10-13 22:06:23