java 提取根目录下所有文件及文件夹遇到的特殊问题

这篇博客讨论了在使用Java的File类处理根目录时可能遇到的权限问题,由于根目录下存在隐藏文件,这些文件通常具有限制访问权限。通过引入File.isHidden()方法来过滤隐藏文件,解决了无法读取根目录内容的问题。这个解决方案不仅适用于Java,其他编程语言也可能面临类似挑战。

一般在学习java,需要用到File类来提取文件和文件夹,按照很多教程来写,基本都能做到

package exam;

import java.io.File;
import java.util.ArrayList;

public class ExtractingFiles {
    String path;
    ExtractingFiles(String path){
        this.path = path;
    }
    ArrayList<String> start() {
        ArrayList<String> files = new ArrayList<String>();
        File a = new File(this.path);

        if(a.isDirectory()){
            File[] S = a.listFiles();
            for(int i =0;i<S.length;i++) {
                System.out.println(S[i]);
                File f = new File(S[i].getPath());
                {
                    if (f.isDirectory()) {
                        ExtractingFiles as = new ExtractingFiles(f.getPath());
                        files.addAll(as.start());
                    } else {
                        files.add(f.getPath());
                    }
            }
        }else {
            System.out.println("这个目录不存在:"+a);
        }
        return files;
    }

}

但是,如果输入根目录,一般会报这样的错:
在这里插入图片描述
实际上,这是因为根目录下有隐藏文件,且这些文件被加了权限,一般无法访问。这就导致明明是确定的路径,却无法读取里面内容的情况。导致File变量是空。
所以,可以加一个判断隐藏文件的方法

package exam;

import java.io.File;
import java.util.ArrayList;

public class ExtractingFiles {
    String path;
    ExtractingFiles(String path){
        this.path = path;
    }
    ArrayList<String> start() {
        ArrayList<String> files = new ArrayList<String>();
        File a = new File(this.path);

        if(a.isDirectory()){
            File[] S = a.listFiles();
            for(int i =0;i<S.length;i++) {
                System.out.println(S[i]);
                File f = new File(S[i].getPath());
//                 File.isHidden()是判断文件是否为隐藏,因为根目录下有一些存放缓存的文件夹,且是隐藏状态,可以用这个来排出隐藏文件
                if (f.isHidden()) {
                } else {
                    if (f.isDirectory()) {
                        ExtractingFiles as = new ExtractingFiles(f.getPath());
                        files.addAll(as.start());
                    } else {
                        files.add(f.getPath());
                    }
                }
            }
        }else {
            System.out.println("这个目录不存在:"+a);
        }
        return files;
    }

}

这样,就不会出问题


其实,不只是java,其他语言读取根目录都会有这个问题
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值