最终效果图

目录树实体类:
/**
* @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. (转)Linux命令:使用dig,nslookup命令解析域名

    Linux命令:使用dig命令解析域名 Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息. dig的全称是 (domain infor ...

  2. Python常用模块一

    一. os模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd ...

  3. input type="image" 提交表单

    提到<input type="image"  />,说起来有些惭愧.之前的工作基本每周都要制作两到三个注册用户的网页.其中就用它提交表单. 那个时候我想当然的以为这是用 ...

  4. Hibernate课程 初探多对多映射2-2 创建持久化类和映射文件

    生成实体类 和 cfg.xml配置 cfg.xml 参照一对多映射 实体类如下: Project 类 package com.ddwei.entity; import java.util.HashSe ...

  5. codevs原创抄袭题 5960 信使

    题目描述 Description •战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系.信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位).指挥部设在第一个哨所. ...

  6. Java 中的四种引用

    1.强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码: Person person = new Per ...

  7. ArcMap如何修改地图坐标系统

    有时候,地图投影坐标需要作出修改,使得符合要求,不然空间参考不一样无法进行进一步的操作,分析等!下面介绍arcgis地图投影坐标的修改! 1.首先,将地图数据导入,这里我导入的是广西的边界图bound ...

  8. rrdtool

    参考 http://oss.oetiker.ch/rrdtool/doc https://calomel.org/rrdtool.html http://www.cnblogs.com/lightid ...

  9. HCNA配置ssh远程登陆

    1.拓扑图 最终实现通过AR1 来SSH登陆到AR2 上 2.配置AR2为开启SSH服务 Please press enter to start cmd line! ############## &l ...

  10. xampp中mysql重置root密码

    1.  停止mysql:用图形化工具或者在cmd命令下输入net stop mysql,在c盘根目录下输入 2.  打开cmd,切换目录到 /xampp/mysql/bin, 运行    mysqld ...