如何获取目录中文件的绝对路径?

Posted

技术标签:

【中文标题】如何获取目录中文件的绝对路径?【英文标题】:How to get absolute paths of files in a directory? 【发布时间】:2013-08-03 16:11:02 【问题描述】:

我有一个包含文件、目录、子目录等的目录。如何使用 Apache Hadoop API 获取所有文件和目录的绝对路径列表?

【问题讨论】:

【参考方案1】:

使用 HDFS API:

package org.myorg.hdfsdemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;



public class HdfsDemo 

    public static void main(String[] args) throws IOException 

        Configuration conf = new Configuration();
        conf.addResource(new Path("/Users/miqbal1/hadoop-eco/hadoop-1.1.2/conf/core-site.xml"));
        conf.addResource(new Path("/Users/miqbal1/hadoop-eco/hadoop-1.1.2/conf/hdfs-site.xml"));
        FileSystem fs = FileSystem.get(conf);
        System.out.println("Enter the directory name :");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Path path = new Path(br.readLine());
        displayDirectoryContents(fs, path);
    

    private static void displayDirectoryContents(FileSystem fs, Path rootDir) 
        // TODO Auto-generated method stub
        try 

            FileStatus[] status = fs.listStatus(rootDir);
            for (FileStatus file : status) 
                if (file.isDir()) 
                    System.out.println("This is a directory:" + file.getPath());
                    displayDirectoryContents(fs, file.getPath());
                 else 
                    System.out.println("This is a file:" + file.getPath());
                
            
         catch (IOException e) 
            e.printStackTrace();
        
    

【讨论】:

@Peter Shipilo :一个小修正,不要忘记关闭 FileSystem 实例。 你需要正确的 hadoop-hdfs 依赖,等等。【参考方案2】:

编写一个递归函数,它接受一个文件并检查它是否是一个目录,如果目录列出其中的所有文件并在 for 循环中检查文件是否是一个目录,然后递归调用或只返回文件列表.

以下类似但不完全相同(这里我只返回 .java 文件)

private static List<File> recursiveDir(File file) 
    if (!file.isDirectory()) 
//          System.out.println("[" + file.getName() + "] is not a valid directory");
        return null;
    

    List<File> returnList = new ArrayList<File>();
    File[] files = file.listFiles();
    for (File f : files) 
        if (!f.isDirectory()) 
            if (f.getName().endsWith("java")) 
                returnList.add(f);
            
         else 
            returnList.addAll(recursiveDir(f));
        
    
    return returnList;

【讨论】:

谢谢,但我正在搜索如何使用 Apache Hadoop 执行此操作。但现在我知道解决方案了。【参考方案3】:

使用 hdfs,您可以使用 hadoop fs -lsr 。

【讨论】:

hdfs dfs ls -R -- 但它没有给我们绝对路径,是吗? 问题是关于 API,而不是 CLI 客户端。

以上是关于如何获取目录中文件的绝对路径?的主要内容,如果未能解决你的问题,请参考以下文章

PHP获取文件绝对路径的代码(上一级目录)

如何通过Java代码获取tomcat服务器的绝对路径

Linux 中如何获取文件的绝对路径

如何在 Shopware 6 中获取公用文件夹绝对路径?

node rename绝对路径

如何通过 Shell (BASH/ZSH/SH) 获取文件的绝对路径?