我有以下结构:
listener
我想获得AAA AAB ABAA ABB的名单,订单并不重要。
有没有有效的方法呢?
答案 0 :(得分:2)
Iterate通过你的文件列表并使用Java.io.File.isDirectory()
方法检查它是否是一个目录,如果它不是一个目录那么它应该是前一个文件夹是最少的子文件夹。
检查http://www.tutorialspoint.com/java/io/file_isdirectory.htm以了解Java.io.File.isDirectory()
答案 1 :(得分:1)
首先,您应该迭代以获取所有文件,之后您可以使用String的split方法获取leaves文件夹。样本:
public MyTest(){
String str = "c:/a/aa/aaa/test.txt";
String[] arr = str.split("/");
System.out.println(arr[arr.length-2]); // print aaa
}
答案 2 :(得分:0)
以下是我使用的代码片段:
private void GetListOfFlows(String path, ArrayList<File> files) {
File directory = new File(path);
File[] fList = directory.listFiles();
if(fList.length>0 && !fList[0].isFile())
for(File x : fList)
subFolders(x, files);
}
private void subFolders(File file, ArrayList<File> folders) {
File[] listFiles = file.listFiles();
if(listFiles.length > 0 && !listFiles[0].isFile())
for(File fileInDir : listFiles)
subFolders(fileInDir, folders);
else if(listFiles.length > 0 && listFiles[0].isFile())
folders.add(file);
}
答案 3 :(得分:0)
您可以使用java.nio.file-API (link)
(Java&gt; = 1.7)
List<Path> subDirs = new ArrayList<>();
Path startPath = Paths.get("your StartPath");
try {
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
//If there is no subDir --> add it to your list
if (Files.list(dir).noneMatch(d ->Files.isDirectory(d))){
subDirs.add(dir);
}
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
e.printStackTrace();
}
//print out all Subdirs
subDirs.forEach(System.out::println);