讀取hdfs目錄,並在web頁面上展示文件里的內容


最終效果圖

最終效果圖

目錄樹實體類:
/**
 * @Author: DaleyZou
 * @Description: hdfs 目錄結構的實體類,用於展示目錄樹的支撐操作
 * @Date: Created in 10:58 2018-9-27
 * @Modified By:
 */
public class HdfsFolder {
    private String id;  // 目錄節點的id
    private String name;  // 目錄節點的名字
    private List<HdfsFolder> children;  // 此時這個目錄下的孩子節點
    
    set   get 方法
}
定義所有方法共享常量:
// hdfs路徑
private static String url = "hdfs://XXX:8020";
// 要讀取的目錄在hdfs下的相對路徑
private static String USERFILEPATH = "/user/XXX";
初始化FileSystem對象
/**
     * 初始化FileSystem對象便於操作文件
     *
     * @return
     */
    public static FileSystem getFileSystem() throws IOException, URISyntaxException {
        //讀取配置文件
        Configuration conf = new Configuration();
        conf.set("fs.hdfs.impl",org.apache.hadoop.hdfs.DistributedFileSystem.class.getName());
        //文件系統
        FileSystem fs = null;
        if (org.apache.commons.lang.StringUtils.isBlank(url)) {
            //返回默認文件系統,如果在hadoop集群下運行,使用此種方法可直接獲取默認文件系統;
            fs = FileSystem.get(conf);
        } else {
            //返回指定的文件系統,如果在本地測試,需要此種方法獲取文件系統;
            URI uri = new URI(url.trim());
            fs = FileSystem.get(uri, conf);
        }
        return fs;
    }
根據路徑遞歸讀取 hdfs目錄
public static void listFolderByCondition(String folder, HdfsFolder hdfsFolder) throws Exception{
        FileSystem fs = HdfsUtils.getFileSystem();
        FileStatus[] filesStatus = fs.listStatus(new Path(folder));

        List<HdfsFolder> children = new ArrayList<>();

        for (FileStatus file : filesStatus) {
            if (file.isFile()){
                HdfsFolder temp = new HdfsFolder();
                temp.setId(folder + "/" + file.getPath().getName());
                temp.setName(file.getPath().getName());

                children.add(temp);
            }
            if (file.isDirectory()){

                HdfsFolder temp = new HdfsFolder();
                temp.setId(folder + "/" + file.getPath().getName());
                temp.setName(file.getPath().getName());

                listFolderByCondition(folder + "/" + file.getPath().getName(), temp);
                children.add(temp);
            }
        }
        hdfsFolder.setChildren(children);

    }

    /**
     * @Description: 根據路徑遞歸讀取 hdfs目錄
     * @date: 17:15 2018-9-27
     * @param: folder 需要讀取目錄的hdfs路徑
     * @return: hdfs目錄信息
     */
    public static HdfsFolder listFolder(String folder)
            throws Exception {
        FileSystem fs = HdfsUtils.getFileSystem();
        FileStatus[] filesStatus = fs.listStatus(new Path(folder));

        HdfsFolder hdfsFolder = new HdfsFolder(); // 目錄結果
        hdfsFolder.setId(folder);
        hdfsFolder.setName("根目錄");

        List<HdfsFolder> children = new ArrayList<>();

        for (FileStatus file : filesStatus) {
            if (file.isFile()){
                HdfsFolder temp = new HdfsFolder();
                temp.setId(folder + "/" + file.getPath().getName());
                temp.setName(file.getPath().getName());

                children.add(temp);
            }
            if (file.isDirectory()){

                HdfsFolder temp = new HdfsFolder();
                temp.setId(folder + "/" + file.getPath().getName());
                temp.setName(file.getPath().getName());

               listFolderByCondition(folder + "/" + file.getPath().getName(), temp);
                children.add(temp);
            }
        }
        hdfsFolder.setChildren(children);

        return hdfsFolder;
    }
根據文件全路徑讀取文件的內容
/**
     * @Description: 根據文件全路徑讀取文件的內容
     * @date: 10:36 2018-9-28
     * @param: fileName 文件全路徑
     * @return: 文件內容
     */
    public static String checkFile(String fileName)
            throws Exception {
        FileSystem fs = getFileSystem();
        FSDataInputStream inStream = fs.open(new Path(fileName));
        BufferedReader br = new BufferedReader(new InputStreamReader(inStream, "UTf-8"));
        StringBuffer buffer = new StringBuffer();
        try {
            String line;
            line = br.readLine();
            while (line != null) {
                buffer.append(line).append("<br>");
                line = br.readLine();
            }
        } finally {
            br.close();
            inStream.close();
        }
        return buffer.toString();
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM