java 下载管理_Java 文件上传下载管理器(控制台)

文件上传下载管理器

项目技术

JDBC + IO + Socket

实现功能

客户端注册:通过输入用户名,密码,确认密码并且校验完成以后将用户信息储存在数据库中。

客户端登录:通过输入用户名和密码到数据库中校验,校验完成进入文件上传下载管理器。

上传文件:通过输入上传文件的路径上传到数据库,支持多个文件上传。

查看文件:通过登录的用户名查找上传的文件。

下载文件:通过输入文件的编号和下载的路径,从数据库进行下载。

删除文件:通过输入文件的编号进行单个文件的删除。

(ps:这次花了一天才写完,不过收获也很多,不足之处,多多交流)

完整代码

User.java

package com.xk;

import java.io.Serializable;

@SuppressWarnings("serial")

public class User implements Serializable {

private String username;

private String password;

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;

}

}

FileEntity.java

package com.xk;

import java.io.Serializable;

@SuppressWarnings("serial")

public class FileEntity implements Serializable {

private String username;

private String fileName;

private int id;

private byte[] fileContent;

public FileEntity(int id, String fileName) {

this.id = id;

this.fileName = fileName;

}

public FileEntity() {

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getFileName() {

return fileName;

}

public void setFileName(String fileName) {

this.fileName = fileName;

}

public byte[] getFileContent() {

return fileContent;

}

public void setFileContent(byte[] fileContent) {

this.fileContent = fileContent;

}

@Override

public String toString() {

return id + "\t" + fileName;

}

}

CommandRelay.java

package com.xk;

import java.io.Serializable;

import java.util.ArrayList;

@SuppressWarnings("serial")

public class CommandRelay implements Serializable {

private String command;

private boolean flag;

private Object userObject = null;

private Object fileObject = null;

private byte[] bytes = null;

private ArrayList fileList = null;

public String getCommand() {

return command;

}

public void setCommand(String command) {

this.command = command;

}

public Object getUserObject() {

return userObject;

}

public void setUserObject(Object userObject) {

this.userObject = userObject;

}

public Object getFileObject() {

return fileObject;

}

public void setFileObject(Object fileObject) {

this.fileObject = fileObject;

}

public boolean isFlag() {

return flag;

}

public void setFlag(boolean flag) {

this.flag = flag;

}

public ArrayList getFileList() {

return fileList;

}

public void setFileList(ArrayList fileList) {

this.fileList = fileList;

}

public byte[] getBytes() {

return bytes;

}

public void setBytes(byte[] bytes) {

this.bytes = bytes;

}

}

DBUtil.java

package com.xk;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class DBUtil {

private static final String DRIVER = "com.mysql.jdbc.Driver";

private static final String URL = "jdbc:mysql://localhost:3306/FileUpload";

private static final String NAME = "root";

private static final String PASSWORD = "root";

/*

* 数据库连接

*/

public Connection getConnection() {

try {

Class.forName(DRIVER);

Connection conn = DriverManager.getConnection(URL, NAME, PASSWORD);

return conn;

} catch (ClassNotFoundException e) {

e.printStackTrace();

return null;

} catch (SQLException e) {

e.printStackTrace();

return null;

}

}

/*

* 数据库关闭

*/

public void close(Connection conn, PreparedStatement ps, ResultSet rs) {

try {

if (rs != null) {

rs.close();

}

if (ps != null) {

ps.close();

}

if (conn != null) {

conn.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

DBTools.java

package com.xk;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

public class DBTools {

DBUtil dbu = new DBUtil();

Connection con = dbu.getConnection();

/*

* 用户登录

*/

public boolean login(User user) throws Exception {

String sql = "select * from users where username = ? and password = ?";

PreparedStatement ps = con.prepareStatement(sql);

ps.setString(1, user.getUsername());

ps.setString(2, user.getPassword());

ResultSet rs = ps.executeQuery();

if (rs.next()) {

return true;

} else {

return false;

}

}

/*

* 用户注册

*/

public boolean register(User user) {

String sql = "insert into users(username,password) value(?,?)";

try {

PreparedStatement ps = con.prepareStatement(sql);

ps.setString(1, user.getUsername());

ps.setString(2, user.getPassword());

ps.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

return false;

}

return true;

}

/*

* 上传文件

*/

public boolean uploadFile(FileEntity fe) {

String sql = "insert into file(username,filename,filecontent) VALUES(?,?,?)";

try {

PreparedStatement ps = con.prepareStatement(sql);

ps.setString(1, fe.getUsername());

ps.setString(2, fe.getFileName());

ps.setBytes(3, fe.getFileContent());

ps.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

return false;

}

return true;

}

/*

* 下载文件

*/

public byte[] downloadFile(FileEntity fe) throws Exception {

String sql = "select filecontent from file where id = ?";

PreparedStatement ps = con.prepareStatement(sql);

ps.setInt(1, fe.getId());

ResultSet rs = ps.executeQuery();

InputStream is = null;

if (rs.next()) {

is = rs.getBinaryStream(1);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buffer = new byte[is.available()];

int len;

while ((len = is.read(buffer)) != -1) {

baos.write(buffer, 0, len);

}

return buffer;

}

return null;

}

/*

* 查看文件

*/

public ArrayList viewFile(FileEntity fe) throws Exception {

ArrayList fileList = new ArrayList<>();

String sql = "select id,filename from file where username= ? ";

PreparedStatement ps = con.prepareStatement(sql);

ps.setString(1, fe.getUsername());

ResultSet rs = ps.executeQuery();

while (rs.next()) {

fileList.add(new FileEntity(rs.getInt(1), rs.getString(2)));

}

return fileList;

}

/*

* 删除文件

*/

public boolean deleteFile(FileEntity fe) throws Exception {

String sql = "delete from file where id = ?";

PreparedStatement ps = con.prepareStatement(sql);

ps.setInt(1, fe.getId());

ps.execute();

if (ps.getUpdateCount() > 0) {

return true;

}

return false;

}

}

Server.java

package com.xk;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[] args) throws Exception {

@SuppressWarnings("resource")

ServerSocket ss = new ServerSocket(8722);

Socket socket = null;

System.out.println("服务器已经启动!");

while (true) {

socket = ss.accept();

ServerThread st = new ServerThread(socket);

st.start();

}

}

}

ServerThread.java

package com.xk;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.util.ArrayList;

public class ServerThread extends Thread {

Socket socket = null;

public ServerThread(Socket socket) {

this.socket = socket;

}

public void run() {

try {

ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());

CommandRelay cr = (CommandRelay) ois.readObject();

try {

cr = inquire(cr);

oos.writeObject(cr);

} catch (Exception e) {

e.printStackTrace();

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public CommandRelay inquire(CommandRelay cr) throws Exception {

User user = (User) cr.getUserObject();

FileEntity fe = (FileEntity) cr.getFileObject();

DBTools dbt = new DBTools();

boolean flag = false;

switch (cr.getCommand()) {

case "login":

flag = dbt.login(user);

break;

case "register":

flag = dbt.register(user);

break;

case "upload":

flag = dbt.uploadFile(fe);

break;

case "view":

ArrayList fileList = dbt.viewFile(fe);

if (!fileList.isEmpty()) {

flag = true;

cr.setFileList(fileList);

}

break;

case "download":

byte[] bytes = dbt.downloadFile(fe);

if (bytes != null) {

flag = true;

cr.setBytes(bytes);

}

break;

case "delete":

flag = dbt.deleteFile(fe);

break;

default:

break;

}

cr.setFlag(flag);

return cr;

}

}

Client.java

package com.xk;

import java.io.BufferedInputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.util.ArrayList;

import java.util.Scanner;

public class Client {

String username = null;

String password = null;

Socket socket = null;

User user = new User();

FileEntity fe = null;

Scanner input = new Scanner(System.in);

/*

* 发送对象

*/

public void sendData(CommandRelay cr) throws Exception {

ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());

oos.writeObject(cr);

oos.flush();

}

/*

* 接收对象

*/

public CommandRelay getData() throws Exception {

ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

CommandRelay cr = (CommandRelay) ois.readObject();

return cr;

}

/*

* 用户登陆

*/

public void login() throws Exception {

System.out.println("*********开始登陆帐号***********");

int count = 0;

CommandRelay cr = new CommandRelay();

while (true) {

System.out.print("请输入帐号: ");

username = input.next();

user.setUsername(username);

System.out.print("请输入密码: ");

user.setPassword(input.next());

count++;

if (count == 3) {

System.out.println("密码错误3次,退出系统!");

System.exit(0);

}

cr.setCommand("login");

cr.setUserObject(user);

socket = new Socket("localhost", 8722);

sendData(cr);

cr = getData();

if (cr.isFlag()) {

break;

} else {

System.out.println("帐号或密码输入错误,请重新输入!");

continue;

}

}

System.out.println("登陆成功,进入文件上传下载器!");

fileMain();

}

/*

* 用户注册

*/

public void register() throws Exception {

System.out.println("**********开始注册帐号**********");

String confirm = null;

CommandRelay cr = new CommandRelay();

while (true) {

System.out.print("请输入帐号: ");

username = input.next();

System.out.print("请输入密码: ");

password = input.next();

System.out.print("请再次输入密码: ");

confirm = input.next();

if (!password.equals(confirm)) {

System.out.println("两次密码不一致,请重新输入!");

continue;

}

user.setUsername(username);

user.setPassword(password);

cr.setCommand("register");

cr.setUserObject(user);

socket = new Socket("localhost", 8722);

sendData(cr);

cr = getData();

if (cr.isFlag()) {

break;

} else {

System.out.println("注册失败,请重新注册!");

continue;

}

}

System.out.println("注册成功请登陆!");

login();

}

/*

* 文件上传下载界面

*/

public void fileMain() throws Exception {

System.out.println("********文件上传下载界面*********");

System.out.print("1.上传\n2.下载\n3.查看\n4.删除\n5.退出\n请输入: ");

String flag = null;

while (true) {

flag = input.next();

switch (flag) {

case "1":

upload();

break;

case "2":

download();

break;

case "3":

view();

break;

case "4":

delete();

break;

case "5":

System.out.println("欢迎下次使用,再见!");

System.exit(0);

break;

default:

System.out.println("输入指令不正确,请重新输入");

continue;

}

break;

}

}

/*

* 文件上传

*/

@SuppressWarnings("resource")

public void upload() throws Exception {

System.out.println("***********上传文件************");

System.out.println("请输入上传路径(如 D:/file/bear.jpg):");

String path = input.next();

String filename = path.substring(path.lastIndexOf('/') + 1);

FileInputStream fis = new FileInputStream(path);

byte[] fileBytes = new byte[fis.available()];

BufferedInputStream bis = new BufferedInputStream(fis);

bis.read(fileBytes);

FileEntity fe = new FileEntity();

fe.setUsername(username);

fe.setFileName(filename);

fe.setFileContent(fileBytes);

CommandRelay cr = new CommandRelay();

cr.setCommand("upload");

cr.setFileObject(fe);

socket = new Socket("localhost", 8722);

sendData(cr);

cr = getData();

if (cr.isFlag()) {

System.out.println("上传成功,返回主界面!");

fileMain();

} else {

System.out.println("上传失败,请重新上传!");

}

close();

}

/*

* 文件查看

*/

public void view() throws Exception {

System.out.println("***********查看文件************");

FileEntity fe = new FileEntity();

fe.setUsername(username);

CommandRelay cr = new CommandRelay();

cr.setCommand("view");

cr.setFileObject(fe);

socket = new Socket("localhost", 8722);

sendData(cr);

cr = getData();

if (cr.isFlag()) {

ArrayList fileList = cr.getFileList();

System.out.println("编号\t文件名");

for (FileEntity fileEntity : fileList) {

System.out.println(fileEntity);

}

} else {

System.out.println("没有文件,还未上传文件!");

}

fileMain();

close();

}

/*

* 文件下载

*/

@SuppressWarnings("resource")

public void download() throws Exception {

System.out.println("***********下载文件************");

System.out.print("请输入要下载文件的编号:");

FileEntity fe = new FileEntity();

fe.setId(input.nextInt());

System.out.println("请输入下载路径(如 D:/file/bear.jpg):");

String filename = input.next();

CommandRelay cr = new CommandRelay();

cr.setCommand("download");

cr.setFileObject(fe);

socket = new Socket("localhost", 8722);

sendData(cr);

cr = getData();

if (cr.isFlag()) {

byte[] bytes = cr.getBytes();

FileOutputStream out = new FileOutputStream(filename);

out.write(bytes);

System.out.println("下载成功,返回主界面!");

} else {

System.out.println("下载失败,没有此文件!");

}

fileMain();

close();

}

/*

* 删除文件

*/

public void delete() throws Exception {

System.out.println("***********删除文件************");

System.out.print("请输入要删除文件的编号:");

FileEntity fe = new FileEntity();

fe.setId(input.nextInt());

CommandRelay cr = new CommandRelay();

cr.setCommand("delete");

cr.setFileObject(fe);

socket = new Socket("localhost", 8722);

sendData(cr);

cr = getData();

if (cr.isFlag()) {

System.out.println("删除成功,返回主界面!");

} else {

System.out.println("删除失败,没有此文件!");

}

fileMain();

close();

}

/*

* 关闭资源

*/

public void close() {

input.close();

try {

if (socket != null) {

socket.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws Exception {

Client client = new Client();

System.out.println("*****欢迎使用xk文件上传下载器*****");

String flag = null;

while (true) {

System.out.print("1.登陆\n2.注册\n3.退出\n请输入: ");

flag = client.input.next();

switch (flag) {

case "1":

client.login();

break;

case "2":

client.register();

break;

case "3":

System.out.println("欢迎下次使用,再见!");

System.exit(0);

break;

default:

System.out.println("输入指令不正确,请重新输入");

continue;

}

break;

}

}

}

运行效果

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值