如果文件夹包含文件,则只显示Java中的目录名称。我们怎么能这样做。截至目前我正在获取主文件夹和子文件夹名称。请查找快照以便更好地理解
public class GetChild {
private static FileFilter onlyDirectories = new FileFilter() {
@Override
public boolean accept(File file) {
return file.isDirectory();
}
};
public static void main(String[] args) {
File currentDir = new File("E:\\Folder"); // current directory
displayDirectoryContents(currentDir);
}
public static void displayDirectoryContents(File dir) {
StringBuilder sb1 = new StringBuilder("");
doDisplayDirectoryContents(dir, sb1);
}
private static void doDisplayDirectoryContents(File dir, StringBuilder sb1) {
File[] files = dir.listFiles(onlyDirectories);
for (File file : files) {
try {
System.out.println("file.getCanonicalPath()===>" + file.getCanonicalPath());
doDisplayDirectoryContents(file, sb1);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
你正在以一种非常复杂的方式做事......希望这澄清......
String filename = "myFile";
String folderPath = "E:\\Folder";
File folder = new File(folderPath);
File file = new File(folderPath, filename);
if (folder.exists() && folder.isDirectory() && file.exists() && file.isFile()) {
// show file
} else {
// error
}
如果你想要的是探索给定文件夹的所有文件夹,并查看你必须使用的文件是否是递归。检查mkyong和SO解决方案......
更新:在这里,您可以使用我的解决方案进行递归,并且只打印包含文件的文件夹(不是文件夹)。
public static void main(String[] args) throws Exception{
String folderPath = "C:\\Android";
File folder = new File(folderPath);
if (folder.exists())
read(folder);
}
public static void read(File folder) {
if (!folder.canRead() || folder.isFile()) return;
File[] files = folder.listFiles();
if (files.length < 1) return;
boolean hasFile = false;
for (File f : files) {
if (f.isDirectory())
read(f);
if (f.isFile())
hasFile = true;
}
if (hasFile) System.out.println(folder.getAbsolutePath());
}
}
答案 1 :(得分:1)
您可以使用FileFilter
和File.listFiles()
的组合来实现此目标。
FileFilter filter = new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isFile();
}
};
if (file.listFiles(filter).length > 0) {
System.out.println("file.getCanonicalPath()===>" + file.getCanonicalPath());
else
continue;