idea下用spring boot搭建整合SSM框架的单体微服务项目过程可参考另一篇博客:https://blog.csdn.net/gaofengyan/article/details/85268253,这里不再赘述,直接上练习代码。既然是微服务项目,在idea下能完成,也可以直接迁移到Linux系统,增加对分布式文件的上传,下载等操作。
如果需要源码和联系项目的静态资源(图片和jQuery和css等资源的)需要去下载https://download.csdn.net/download/gaofengyan/10930032 如果只是看代码研究,可以直接看这里的。
数据库 netdisk.sql
/*
SQLyog Ultimate v11.27 (32 bit)
MySQL - 5.7.21 : Database - netdisk
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`netdisk` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `netdisk`;
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`userName` varchar(50) NOT NULL,
`password` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
/*Data for the table `user` */
insert into `user`(`id`,`userName`,`password`) values (1,'zhangsan','123'),(2,'lisi','123');
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
创建工程【springboot-netdisk】,并创建普通maven管理的项目模块【netdisk】。
pom.xml配置依赖(如果架包有冲突,需要自己去重,没有springboot启动插件,也需要手动给加上,在后面的插件配置):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.kgc1803</groupId>
<artifactId>netdisk</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>netdisk</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring.boot.version>2.1.0.RELEASE</spring.boot.version>
<mybaties.spring.boot.version>1.3.2</mybaties.spring.boot.version>
<mysql.driver.version>5.1.46</mysql.driver.version>
</properties>
<dependencies>
<!--spring-*.jar-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--spring mvc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.driver.version}</version>
</dependency>
<!--mybaties、mybaties-spring、spring-jdbc-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybaties.spring.boot.version}</version>
</dependency>
<!--jsp 页面插件jar包-->
<!--ideal 内置tomcat不支持jsp,增加jsp jar包-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>9.0.12</version>
<scope>provided</scope>
</dependency>
<!-- 文件上传和下载的两个包 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>${spring.boot.version}</version>
<scope>provided</scope>
</dependency>
<!-- log4j.jar日志文件 -->
<!--<dependency>-->
<!--<groupId>log4j</groupId>-->
<!--<artifactId>log4j</artifactId>-->
<!--<version>1.2.13</version>-->
<!--</dependency>-->
</dependencies>
<build>
<finalName>netdisk</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
pojo User.java 实体类:
package org.kgc1803.netdisk.pojo;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
/**
* @author hduser User 类
*/
public class User implements Serializable {
@JsonProperty
private Integer id;
@JsonProperty
private String userName;
@JsonProperty
private String password;
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
dao UserMapper.java 接口(含SQL语句):
package org.kgc1803.netdisk.dao;
import org.apache.ibatis.annotations.*;
import org.kgc1803.netdisk.pojo.User;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface UserMapper {
/**
* 登陆
* @param user
* @return
*/
@Select("SELECT userName,password FROM user WHERE userName=#{userName} AND PASSWORD=#{password}")
@Results(id = "userMap",value = {
@Result(property = "userName",column = "userName",javaType = String.class),
@Result(property = "password",column = "password",javaType = String.class)
})
User getUser(User user);
/**
* 注册
* @param user
* @return
*/
@Insert("INSERT INTO user (userName,password) VALUE (userName=#{userName},password=#{password})")
User registUser(User user);
}
service 接口 UserService .java:
package org.kgc1803.netdisk.service;
import org.kgc1803.netdisk.pojo.User;
public interface UserService {
//登陆
User loginUser(User user);
//注册
User registUser(User user);
}
serviceimpl实现类 UserServiceImpl.java :
package org.kgc1803.netdisk.service.impl;
import org.kgc1803.netdisk.dao.UserMapper;
import org.kgc1803.netdisk.pojo.User;
import org.kgc1803.netdisk.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
public User loginUser(User user) {
return userMapper.getUser(user);
}
public User registUser(User user){
return userMapper.registUser(user);
}
}
控制器 controller层
首页访问:
package org.kgc1803.netdisk.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping("/")
public String index(){
return "login";
}
}
用户登陆的控制器,这里简单写了下快速登陆及注册的效果
package org.kgc1803.netdisk.controller;
import org.kgc1803.netdisk.pojo.User;
import org.kgc1803.netdisk.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
/**
* 快速登陆及注册
* @param userName
* @param password
* @param regFlag
* @param session
* @return
*/
@RequestMapping("/getuser")
public String getUserInfo(String userName,String password,String regFlag, HttpSession session){
User user = new User();
user.setUserName(userName);
user.setPassword(password);
User u = userService.loginUser(user); //调用登陆方法
if (regFlag!=null && !userName.equals("") && !password.equals("")){
if (u!=null){//登陆成功
session.setAttribute("session_user",u); //保存用户到session
return "my";
}else {//登陆失败
u = userService.registUser(user); //调用注册
session.setAttribute("session_user",u); //保存用户到session
return "my";
}
}else {
if (u!=null){//登陆成功
session.setAttribute("session_user",u); //保存用户到session
return "my";
}else {//登陆失败
return "login";
}
}
}
}
创建resources资源文件并增加application.properties配置文件:
#dataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.3.55:3306/netdisk?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
#mybatis.type-aliases-package=org.kgc1803.netdisk.pojo
#spring mvc
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
#spring 字符集
spring.http.encoding.charset=UTF-8
spring.http.encoding.force=true
spring.http.encoding.enabled=true
#服务器
server.port=8081
server.tomcat.uri-encoding=UTF-8
设置 webapp 静态资源目录,这里简单给两个jsp,一个是登陆的页面login.jsp,一个是首页my.jsp
登录页:
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>xxxxxx登陆</title>
<link rel="stylesheet" href="../css/common.css"/>
<link rel="stylesheet" href="../css/register.css"/>
</head>
<body>
<div class="box">
<div class="nav cl">
<div class="nav_z z">
<img src="../images/register01.png"/>
</div>
<div class="nav_y y">
<a href="">关于我们</a>
<span>丨</span>
<a href="">联系我们</a>
</div>
</div>
<div class="main cl">
<div class="main_z z">
<img src="../images/register02.png"/>
</div>
<div class="main_y y">
<div class="main_y_title">
欢迎使用
</div>
<div class="meta">${errorInfo}</div>
<div class="main_y_content">
<%-- 登陆操作 --%>
<form action="${pageContext.request.contextPath}/user/getuser" method="post" id="loginForm">
<div class="main_input">
<input type="text" placeholder="请输入用户名" class="userName" name="userName" maxlength="11"/>
<img src="../images/register03.png"/>
</div>
<div class="main_input">
<input type="password" placeholder="请输入密码" class="password" name="password" maxlength="18"/>
<img src="../images/register03.png"/>
</div>
<div class="remember_password">
<input type="checkbox" checked="checked" name="regFlag" value="true" class="examine"/>
<span>快速注册</span>
</div>
<div class="register" >
<input type="submit" style="color:white;" value="登 录">
</div>
<div class="main_y_content_buttom">
<a href="">忘记密码?</a>
</div>
</form>
</div>
</div>
</div>
<div class="footer">
2016 youlianyun inc. All Rights Reserved
</div>
</div>
<script type="text/javascript" src="../js/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="../js/register.js"></script>
<script>
</script>
</body>
</html>
<!--此段可直接删除-开始-->
<script type="text/javascript" src="http://www.sucainiu.com/themes/jsApi/demoAd/01.js" charset="UTF-8"></script>
<!--此段可直接删除-结束-->
首页,这里下面已经写了部分分布式的上传,下载,删除文件等操作,可以修改后进行分布式【hdfs】相关操作。:
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.File"%>
<%@ page language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文档管理系统 - 素材牛模板演示</title>
<link rel="stylesheet" href="../css/common.css" type="text/css"/>
<link rel="stylesheet" href="../css/index.css" type="text/css"/>
<link rel="stylesheet" href="../css/my.css" type="text/css" media="screen"/>
<link rel="stylesheet" href="../page/base.css" type="text/css" media="screen"/>
<link rel="stylesheet" href="../page/pageGroup.css" type="text/css" media="screen"/>
</head>
<%--<jsp:include page="common.jsp" />--%>
<!--顶部-->
<div class="nav">
<div class="nav cl">
<div class="nav_z z">
<img src="../images/register01.png"/>
</div>
<div class="nav_y y">
<a href="">关于我们</a>
<span>丨</span>
<a href="">联系我们</a>
</div>
<div class="userNumber y">
你好,<span>${session_user.userName }</span>
</div>
</div>
</div>
<!--顶部结束-->
<!--菜单-->
<div class="left-menu">
<div class="left-menu-top">
<a href="javascript:void(0)">
<div class="left-menu-top-small">
<img src="../images/index_02.png"/>
</div>
</a>
</div>
<div class="left-menu-four">
<div class="left-menu-four-small">
<div class="left-menu-four-small-new"></div>
</div>
<div class="contain_four">
<div class="contain_four_main">
<span>容量:</span>
<span class="cont">5</span>GB;可用
<span class="use">3</span>GB
</div>
<div class="max_add">
<button class="max_container" >升级容量</button>
</div>
</div>
</div>
<div class="foot">
<a href="">返回意见</a>丨
<a href="">帮助中心</a>
</div>
</div>
<!--菜单end-->
<!--菜单右边的iframe页面-->
<div id="right-content" class="right-content">
<div class="content">
<div id="page_content">
<div class="zuijinTop cl">
<img src="../images/xiazai.png" class="xiazai z" alt="">
<img src="../images/chong.png" class="chong z" alt="">
<img src="../images/shanchu.png" class="shanchu z" alt="">
<img src="../images/xinjian.png" class="xin z" alt="">
<div class="sousuo y">
<div class="ss1 z"></div>
<input type="text" placeholder="请输入关键字搜索文件" class="z sousouInput" />
</div>
</div>
<div class="zuijinTitle cl">
<img src="../images/select.png" data-all="no" class="z allIcon allSelect" alt="">
<div class="z the">我的文档</div>
<div class="z the">人事</div>
</div>
<div id="contentDiv" class="content cl" style="padding-left: 2%;height:500px;overflow-y:auto;pisition:relative;">
<%--<% //这里写java 代码--%>
<%--String userName = ""+session.getAttribute("session_user");--%>
<%--File dir = new File("f:/netdisk/"+userName);--%>
<%--if(!dir.exists()){//如果没有新建--%>
<%--dir.mkdir();--%>
<%--}--%>
<%--for(File f :dir.listFiles()){--%>
<%--%>--%>
<%--<div class="box template" id="<%=f.getName() %>" data-show="no">--%>
<%--<img src="../images/wenjian.png" class="icon" alt="">--%>
<%--<div>--%>
<%--<p><%=f.getName() %></p>--%>
<%--<input type="text" class="none">--%>
<%--</div>--%>
<%--<img src="../images/select.png" class="select" alt="">--%>
<%--</div>--%>
<%--<% --%>
<%--}--%>
<%--%>--%>
<%----%>
<!-- <div class="box2 template" data-show="no">
<img src="images/icon2.png" class="icon" alt="">
<div>
<p>合同管理</p>
<input type="text" class="none">
</div>
<img src="images/select.png" class="select" alt="">
</div>
<div class="box2 template" data-show="no">
<img src="images/icon1.png" class="icon" alt="">
<div>
<p>合同管理</p>
<input type="text" class="none">
</div>
<img src="images/select.png" class="select" alt="">
</div>
<div class="box2 template" data-show="no">
<img src="images/icon3.png" class="icon" alt="">
<div>
<p>合同管理</p>
<input type="text" class="none">
</div>
<img src="images/select.png" class="select" alt="">
</div> -->
</div>
<div style='width:90%;position:fixed;bottom:10px;margin:auto'>
<div id="pageGro" class="cb">
<div class="pageUp">上一页</div>
<div class="pageList">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>
<div class="pageDown">下一页</div>
</div>
</div>
<!--移动弹窗-->
<div class="moveBox none">
<div class="moveTitle">
<span>上传</span>
</div>
<div class="closeMove">+</div>
<div class="wenjian cl">
<img src="../images/icon3.png" class="z" alt="">
</div>
<div class="urlBox">
<div class="urlBoxTitle">
选择目标
</div>
<div class="contentMain cl">
<input type="file" id="uploadFile" >
</div>
</div>
<input type="button" class="y quxiao" value="取消">
<input type="button" class="y ok" value="确定">
</div>
</div>
</div>
</div>
<body>
<script type="text/javascript" src="../js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="../page/pageGroup.js"></script>
<script type="text/javascript" src="../js/index.js"></script>
<script>
$(".sousouInput").blur(function(){
$(".sousuo").css({
border:"1px solid #ccc"
});
$(".ss1").removeClass("focusState");
});
$(".sousouInput").focus(function(){
$(".sousuo").css({
border:"1px solid #9cf"
});
$(".ss1").addClass("focusState");
});
$(".zuijinTitle").css({
width:$(window).width()-237
});
$(".content").css({
width:$(window).width()-237
});
$("#page_content").css({
width:$(window).width()-237
});
$(".allIcon").click(function(){
if($(this).attr("data-all")=="yes"){
$(this).attr("src","images/select.png");
$(".select").attr("src","images/select.png");
$(this).attr("data-all","no");
$(".template").attr("data-show","no");
$(".template").removeClass("box2H");
}else{
$(this).attr("src","images/selectC.png");
$(".template").attr("data-show","yes");
$(this).attr("data-all","yes");
$(".template").addClass("box2H");
$(".select").attr("src","images/selectC.png");
}
});
bindMyClick();
function bindMyClick(){
$(".content .template").each(function(){
$(this).click(function(){
if($(this).attr("data-show")=="yes"){
$(this).removeClass(".box2C");
$(this).removeClass(".box2H");
$(this).find(".select").attr("src","images/select.png");
$(this).attr("data-show","no");
// $(this).find(".select").hide();
}else {
$(this).addClass(".box2C");
$(this).addClass(".box2H");
$(this).find(".select").attr("src","images/selectC.png");
$(this).attr("data-show","yes");
$(this).find(".select").show();
}
});
});
}
$(".contentMain .templateUrl").each(function(e){
$(".contentMain .templateUrl").eq(e).click(function(){
$(".contentMain p").removeClass("templateUrlClickP");
$(".contentMain p").eq(e).addClass("templateUrlClickP");
});
});
//取消 关闭
$(".closeMove,.quxiao").click(function(){
$(".moveBox").hide();
});
//确定
$(".ok").click(function(){
//服务器要去存用户上传的文件(upload.jsp)
//新建一个传输对象
var fm = new FormData();
//将用户上传的文件 添加到传输对象汇总
var tempFile = $('#uploadFile').prop('files')[0];
fm.append(tempFile.name,tempFile);
$.ajax({
url:'Upload',//处理请求的地址
data:fm,//上传的文件
type:'post',//请求必须是post才能上传文件
contentType:false,//禁止
processData:false,//禁止
async:false,
success:function(){
$(".moveBox").hide();
//2)页面增加一个文件图标
var newContent = ' <div class="box2 template" id="'+tempFile.name+'" data-show="no">'+
'<img src="../images/icon1.png" class="icon" alt="">'+
'<div>'+
'<p>'+tempFile.name+'</p>'+
'<input type="text" class="none">'+
'</div>'+
'<img src="../images/select.png" class="select" alt="">'+
'</div>';
//给contentDiv 组件新增加内容
var file = $(newContent);
file.click(function(){
if($(this).attr("data-show")=="yes"){
$(this).removeClass(".box2C");
$(this).removeClass(".box2H");
$(this).find(".select").attr("src","images/select.png");
$(this).attr("data-show","no");
// $(this).find(".select").hide();
}else {
$(this).addClass(".box2C");
$(this).addClass(".box2H");
$(this).find(".select").attr("src","images/selectC.png");
$(this).attr("data-show","yes");
$(this).find(".select").show();
}
});
$('#contentDiv').append(file);
}
});
});
//上传按钮点击处理
$('.left-menu-top').click(function(){
//1)用户选择文件上传并传到tomcat所在的系统里
$(".moveBox").show();
});
//删除
$('.shanchu').click(function(){
var fileNames = '';//要删除的文件名字数组
$('[data-show="yes"]').each(function(){
fileNames+=$(this).attr("id")+',';
}); //所有选中的内容
$.ajax({
url:'delete.jsp',
data:{names:fileNames},
type:'post',
success:function(){
$('[data-show="yes"]').each(function(){
$(this).remove();
});
}
});
});
//下载
$('.xiazai').click(function(){
var fileName = '';//要删除的文件名字数组
$('[data-show="yes"]').each(function(){
fileName=$(this).attr("id");
$.ajax({
url:'download.jsp',
data:{fname:fileName},
type:'post',
success:function(data){
var blob = new Blob([data])
var a = document.createElement('a');
a.download = fileName;
a.href=window.URL.createObjectURL(blob)
a.click()
}
});
}); //所有选中的内容
});
</script>
</body>
</html>
<!--此段可直接删除-开始-->
<script type="text/javascript" src="http://www.sucainiu.com/themes/jsApi/demoAd/01.js" charset="UTF-8"></script>
<!--此段可直接删除-结束-->
首页的 index.js
/**
* Created by Administrator on 2016/7/19.
*/
$(function(){
var i=$(".cont").text();
var j=$(".use").text();
$(".left-menu-four-small-new").css({
width:$(".left-menu-four-small").width()*((i-j)/i)
})
$('.right-content').css({
height:$(window).height()
})
});
登陆注册的reginster.js
/**
* Created by Administrator on 2016/7/17.
*/
var windowWidth=$(window).width();
var windowHeight=$(window).height();
$(function(){
$(".box").css({
width:windowWidth,
height:windowHeight
});
$(".main_input input").focus(function(){
$(this).css({
backgroundColor:"#fafec0"
});
$(this).parent().find('img').show();
}) ;
$(".main_input img").click(function(){
$(".main_input input").val("");
});
$(".main_input input").blur(function(){
$(this).css({
backgroundColor:"#fff"
});
$(".main_input img").hide();
}) ;
});
在各类的包的同级创建spring boot的启动类 NetdiskApplication.java
package org.kgc1803.netdisk;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class NetdiskApplication {
public static void main(String[] args) {
SpringApplication.run(NetdiskApplication.class, args);
}
}
测试:用spring boot启动项目,登陆http://localhost:8081/即可进入登陆首页,如下图,快速注册及表现在是否选择快速注册:
登陆进入首页(这里把分布式的部分开发留存,不给大家了,相关的【CentOS系统下简单的分布式(HDFS)文件夹创建,文件上传、下载等简单操作】在另一篇大数据的应用博客 https://blog.csdn.net/gaofengyan/article/details/86103015 将引用地址修改后即可使用:
为了方便使用,我把之前的工具类做了修改,就可以直接使用了,如下:
HdfsUtil.java
package org.kgc1803.netdisk.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
/**
* hdfs io操作
*
* @author hduser
*
*/
public class HdfsUtil {
private static FileSystem fs;
static {
// 加载hdfs并获取filesystem
// 加载hdfs核心配置文件core-site.xml
Configuration conf = new Configuration();
// 获取文件系统对象FileSystem
try {
fs = FileSystem.get(conf);
} catch (IOException e) {
e.printStackTrace();
}
}
// 查询一个目录下的所有字文件信息 hadoop dfs -ls /
public static FileStatus[] getFileInfo(Path rootPath) {
// listStatus显示当前目录子文件信息
FileStatus[] files = null;
try {
files = fs.listStatus(rootPath);
} catch (IOException e) {
e.printStackTrace();
}
return files;
}
// 新建一个目录 hadoop fs -mkdir /***
public static void mkdir(Path p) {
try {
if (!fs.exists(p)) {
fs.mkdirs(p);
} else {
System.out.println("目录已存在!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 示例:上传本地 文件到hdfs 上
// hadoop dfs -put 本地文件 hdfs目录
// hadoop dfs -copyFromLocal 本地文件 hdfs目录
public static void copyFromLocal(Path localPath, Path hdfsPath) {
try {
fs.copyFromLocalFile(localPath, hdfsPath);
} catch (IOException e) {
e.printStackTrace();
}
}
// 将文件上传到HDFS
/**
* 通过io流和路径参数将文件上传
* @param is
* @param hdfsPath
*/
public static void upLoadFileToHDFS(InputStream is,String hdfsPath){
try {
FSDataOutputStream outputStream = fs.create(new Path(hdfsPath), true);
IOUtils.copyBytes(is, outputStream, 1024,true); //hadopp的IOUtils 工具类调用copyBytes()方法
} catch (IOException e) {
e.printStackTrace();
}
}
//示例: 下载hdfs上的文件到本地
// hadoop dfs -get hdfs文件 泵地文件
// hadoop dfs -copyFromLocal hdfs目文件 本地文件
public static void copyToLocal(Path hdfsPath, Path localPath) {
try {
fs.copyToLocalFile(hdfsPath, localPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 下载hdfs的文件到本地
* @param hdfsPath
* @param localPath
*/
public static void downLoadFile(String hdfsPath,String localPath){
FSDataInputStream inputStream;
FSDataOutputStream outputStream;
try {
inputStream = fs.open(new Path(hdfsPath)); //hdfs路径,用输入流,将hdfs的文件往外面读
outputStream = fs.create(new Path(localPath),true); //创建本地用户路径,并使用输出流,将hdfs接收到的文件以流的形式往文件写
IOUtils.copyBytes(inputStream, outputStream, 1024,true); //调用hadoop的io流方法读写文件(下载)
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 删除文件或目录
public static void remove(Path p) {
try {
fs.delete(p, true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 重命名文件或目录
public static void rename(Path oldPath, Path newPath) {
try {
fs.rename(oldPath, newPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}