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

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

一般在学习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,其他语言读取根目录都会有这个问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您可以使用以下命令来查看HDFS上的文件和路径: - 查看根目录及其子目录:`hdfs dfs -ls /` - 查看指定目录及其子目录:`hdfs dfs -ls /path/to/directory` - 查看指定文件的信息:`hdfs dfs -ls /path/to/file` 其中,`-ls`选项用于列出目录或文件的详细信息,包括权限、拥有者、大小、修改日期等。如果您只想查看文件或目录的名称,可以使用`-ls`选项和`awk`命令来提取出名称信息: - 查看根目录及其子目录的名称:`hdfs dfs -ls / | awk '{print $NF}'` - 查看指定目录及其子目录的名称:`hdfs dfs -ls /path/to/directory | awk '{print $NF}'` - 查看指定文件的名称:`hdfs dfs -ls /path/to/file | awk '{print $NF}'` ### 回答2: 要查看HDFS上有哪些文件和路径,可以使用以下几种方法: 1. Hadoop命令行界面(CLI):在命令行中输入`hadoop fs -ls /`,其中`/`是根目录,可以替换为其他目录路径。这将显示出该目录下的所有文件和子目录。 2. Hadoop Web浏览器界面:打开Hadoop集群的Web界面,通常为`http://<Hadoop集群的主机名>:<端口号>`。在界面中导航到文件浏览器(File Browser)或文件管理器(File Manager),即可显示HDFS上的文件和路径。 3. Hadoop API:可以使用Hadoop提供的Java API来编写程序,实现查询HDFS上的文件和路径。具体可以使用`FileSystem`类的`listStatus()`方法来获取指定路径下的文件和目录的详细信息。 示例代码如下: ``` import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.Path; public class HdfsFileViewer { public static void main(String[] args) { Configuration conf = new Configuration(); try { FileSystem fs = FileSystem.get(conf); FileStatus[] status = fs.listStatus(new Path("/")); for (FileStatus file : status) { System.out.println(file.getPath()); } } catch (Exception e) { e.printStackTrace(); } } } ``` 以上是三种常用的方法,根据实际需要选择其中一种或多种方法来查看HDFS上的文件和路径。 ### 回答3: 要查看HDFS上的文件和路径,可以使用以下几种方法: 1. 使用Hadoop命令行界面: 在Hadoop安装目录下的bin文件夹中,使用命令`hadoop fs -ls /`可以列出根目录下的所有文件文件夹。使用`hadoop fs -ls /path`可以列出指定路径下的所有文件文件夹。 2. 使用Hadoop Web UI: 在Web浏览器中输入Hadoop集群的地址,并加上端口号,默认情况下为50070。然后选择“浏览文件系统”选项,在此界面上可以浏览和查看HDFS上的文件文件夹,包括其路径和属性等信息。 3. 使用Hadoop文件浏览器: 在Web浏览器中输入Hadoop集群的地址,并加上端口号,默认情况下为50075。然后选择“文件浏览器”选项,可以在此界面上搜索、查看和操作HDFS上的文件文件夹。 4. 使用HDFS Shell命令: 在Hadoop安装目录下的bin文件夹中,使用命令`hdfs dfs -ls /`可以列出根目录下的所有文件文件夹。使用`hdfs dfs -ls /path`可以列出指定路径下的所有文件文件夹。 无论使用哪种方法,都可以轻松地查看HDFS上的文件和路径。这些方法不仅适用于查看文件和路径,还可以用于搜索、复制、移动和删除等操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值