【问题标题】:if Folder Contain File Then it Shows Else ignore in Java?如果文件夹包含文件,那么它在 Java 中显示 Else 忽略?
【发布时间】:2015-07-03 08:28:35
【问题描述】:

如果文件夹包含文件,则仅在 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();
            }
        }
      }
}

【问题讨论】:

  • 这是 Java 7+ 吗?如果是,有什么理由不使用 java.nio.file?
  • 我正在使用 Java 7,但我使用相同的代码执行了更多任务,但最初此代码会产生问题。我只想要包含任何文件的子文件夹名称。更好地看到快照。谢谢

标签: java subdirectory


【解决方案1】:

您可以结合使用FileFilterFile.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;

【讨论】:

  • file.getCanonicalPath() 给出相同的文件夹目录。请查看我的代码一次
  • @Jordi Castilla: :您的代码仅返回子文件夹。我想访问主文件夹内的更多文件夹。如果我想访问文件夹和子文件夹,那么唯一的选择是递归。最好告诉我文件夹是否包含文件然后显示否则忽略它。看看我的代码,它工作正常,但它显示了一些文件夹名称,那些不包含任何文件。请检查一次我的代码和快照。谢谢
【解决方案2】:

您正在以一种非常复杂的方式做事......希望这能澄清......

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
}

如果你想要浏览给定文件夹的所有文件夹,看看里面是否有文件,你必须使用递归。检查mkyongSO 解决方案...

更新:这里有我的解决方案,使用递归并仅打印包含文件的文件夹(不是文件夹)。

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());
    }
}

【讨论】:

  • 我仍然得到相同的路径。
  • 我只想打印包含文件的文件夹名称。我不想列出文件。在这里,我得到了一些不包含文件的文件夹名称。查看快照或代码
  • 使用快照检查更新的代码以便更好地理解
猜你喜欢
  • 2015-12-25
  • 2010-11-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
相关资源
最近更新 更多