最终效果图

目录树实体类:
/**
* @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();
}

读取hdfs目录,并在web页面上展示文件里的内容的更多相关文章

  1. HTML5 File接口(在web页面上使用文件)

    File接口提供了与文件相关的信息,并且运行JavaScript在web页面上去访问文件中的内容. File对象来自于用户使用input标签选择文件返回的FileList对象,来自于拖放操作的Data ...

  2. web页面上展示图片时,图片不显示,报错:ERR_CONTENT_LENGTH_MISMATCH

      问题描述 前端页面加载css,和js文件的时候,经常出现ERR_CONTENT_LENGTH_MISMATCH的报错情况.   查找问题 在单独打开hearder中css,js的网络地址是能打开的 ...

  3. 数据採集之Web端上传文件到Hadoop HDFS

    前言 近期在公司接到一个任务.是关于数据採集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志採集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好近期都有在这方面 ...

  4. Web页面上的控件

    Web页面,即:.aspx文件页面的根目录下,分为了5部分 [0]-{System.Web.UI.LiteralControl} [1]-{System.Web.UI.HtmlControls.Htm ...

  5. 演示如何通过 web api 上传文件MVC40

    演示如何通过 web api 上传文件WebApiWebFormHost/UploadFileController.cs /* * 通过 web api 上传文件 */ using System; u ...

  6. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  7. 紧接上篇,jQuery调用jsonp,并且在页面上展示

    在上篇中提到了spring4.1+支持jsonp的调用,做了个例子,用来在页面上展示jsonp: (js写的丑了点,本人后端出生,前端大侠们轻拍~) var Menu = function () { ...

  8. Python - Django - 页面上展示固定的页码数

    如果页数太多的话,全部显示在页面上就会显得很冗杂 可以在页面中显示规定的页码数 例如: book_list.html: <!DOCTYPE html> <html lang=&quo ...

  9. 使用js在页面上新建文件夹

    使用js在页面上新建文件夹 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

随机推荐

  1. PHP会话管理

    Session使用 在每个页面中使用session之前,必须使用session_start() 在每个session中都可以使用$_SESSION这个全局数组,在页面必须调用session_start ...

  2. tinkphp3.2.3 关于事务处理。

    自己做一个测试,关于事务处理的. 在对多表进行操作的时候 基本上都离不开事务. 有的操作,是要由上一操作后,产的值(如主表里插入后,要获取插入的主键ID值,返回给下面处理表用.)带到后面的表处理当中去 ...

  3. VMware 虚拟机(linux)增加根目录磁盘空间

    VMware 虚拟机(linux)增加根目录磁盘空间     今天查看学校的监控报修系统,不能访问了!!!系统运行很慢,用top命令查看发现内存使用率90%,用"df -h ”查看“/”目录 ...

  4. 操作符&流程控制

    运算符:算术运算符 赋值运算符  字符串运算符 递增(++)和递减(--)运算符 逻辑运算符 比较运算符 三元运算符         1.算术运算符           算术运算符,用于完成各种算术运 ...

  5. 二维码项目实例为二维码添加logo

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. js获取省市

    前台代码 @{ IList<Provinces> allProvinces = ViewBag.AllProvinces; IList<Districts> allDistri ...

  7. java 使用Queue在队列中异步执行任务

    先创建一个总的Handler(队列统一处理接口),名字就叫做 QueueTaskHandler public interface QueueTaskHandler { void processData ...

  8. java并发编程,通过Future取消任务

    功能:通过Executor框架提供的线程池,提交任务,使用Future取消任务 任务:增长序列号,从0开始隔1s增长1 通过Future指定时间取消任务 IncrementSequence.java ...

  9. Spring文件下载

    package com.smbea.demo.controller; import java.io.BufferedInputStream; import java.io.BufferedOutput ...

  10. 微信公众平台开发——helloworld

    威信公众平台有两种模式:编辑模式 和 开发模式. 普通的功能可以通过编辑模式来搞定.开发模式具有更多的功能.让我们来使用开发模式开发helloword吧 步骤如下: 1.先注册一个公众号(https: ...