java通过socket实现简单网盘模拟,选择文件,查询该文件所包含的文件,下载,上传(控制台打印输出,简单易懂,无需前端,附详细代码直接运行)

您所在的位置:网站首页 java代码打印 java通过socket实现简单网盘模拟,选择文件,查询该文件所包含的文件,下载,上传(控制台打印输出,简单易懂,无需前端,附详细代码直接运行)

java通过socket实现简单网盘模拟,选择文件,查询该文件所包含的文件,下载,上传(控制台打印输出,简单易懂,无需前端,附详细代码直接运行)

2023-03-22 12:06| 来源: 网络整理| 查看: 265

前言:

只需要开发工具ideal,最基础的java项目,无需任何框架。主要就是模拟网盘的功能,通过开创多个文件夹来区分服务器的空间,客户端的本地空间,话不多说先看效果图

执行步骤:

1.开启服务器

2.客户端发送文件名给服务器

3.服务器查询到该文件所包含的文件

4.服务器将包含的文件信息发送给客户端

5.客户端选择是下载还是上传

6.下载操作是从返回的文件中选择,将执行下载的文件保存到客户端下载的文件夹中

7.上传将自己已经下载过的文件上传到服务器

8.服务器将上传的文件保存到自己的文件夹中

 

 

 

 

 Client代码: package com.dmdd.mywangpan; import com.sun.xml.internal.messaging.saaj.util.ByteInputStream; import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream; import java.io.*; import java.net.Socket; import java.util.Scanner; public class Client { //客户端发送文件名给服务器的功能 String JSONFileNames = ""; private static final String DIR = "E:\\soft\\"; private static final String DOWN_LOAD = "E:\\myWanPanDownLoad\\"; private static final String IP = "192.168.56.1"; public void sendFileName(String ip, int port, String fileName) { System.out.println("输入的文件名为" + fileName); //创建client对象 try (Socket client = new Socket(ip, port)) { //创建Object输出流 将文件名输出到服务器端 ObjectOutputStream os = new ObjectOutputStream(client.getOutputStream()); os.writeUTF(fileName); os.flush(); os.close(); // clientIS.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 接收文件信息合集 * * @param ip * @param port */ public void readJSONFileNames(String ip, int port) { try (Socket client = new Socket(ip, port)) { //创建输入流获取服务器端的Json字符串 ObjectInputStream clientIS = new ObjectInputStream(client.getInputStream()); JSONFileNames = clientIS.readUTF(); System.out.println(JSONFileNames); clientIS.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 客户端指定返回过来的文件进行下载或者上传到服务器 * * @param */ public void upload(String ip, int port, String JSONFileNames) { Scanner scanner = new Scanner(System.in); System.out.println("请选择是下载文件,还是上传文件,扣1下载,扣2上传"); int uploadOrDownLoad = scanner.nextInt(); //执行下载文件的操作 if (uploadOrDownLoad == 1) { //创建保存文件的文件夹 File dir = new File(DOWN_LOAD); if (!dir.exists()) { System.out.println("文件不存在"); dir.mkdir(); return; } //将JSON字符串分隔开成数组 String[] fileNames = JSONFileNames.split(","); System.out.println("请选择你想下载的文件"); for (int i = 0; i < fileNames.length; i++) { System.out.println(i + 1 + fileNames[i]); } int select = scanner.nextInt(); //获取想要下载的文件名 String fileName = fileNames[select - 1]; File file = new File(fileName); //创建输入流 try { FileInputStream fileInputStream = new FileInputStream(DIR + fileName); //创建输出流 FileOutputStream fileOutputStream = new FileOutputStream(DOWN_LOAD + fileName); byte[] buf = new byte[1024]; int len = 0; //边读边写 while ((len = fileInputStream.read(buf)) != -1) { fileOutputStream.write(buf, 0, len); } System.out.println("文件下载成功请在" + DOWN_LOAD + fileName + "查看"); fileInputStream.close(); fileOutputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //执行上传操作 else { try (Socket client = new Socket(ip, port)) { File file = new File(DOWN_LOAD); File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { System.out.println(i + 1 + files[i].getName()); } System.out.println("请选择您要上传的文件"); int select = scanner.nextInt(); //获取想要下载的文件名 String fileName = files[select - 1].getName(); File UploadFile = new File(fileName); //创建输入流 FileInputStream fileInputStream = new FileInputStream(DOWN_LOAD + fileName); //创建输出流 ObjectOutputStream objectOutputStream = new ObjectOutputStream(client.getOutputStream()); //将文件名传过去 objectOutputStream.writeUTF(fileName); byte[] buf = new byte[1024]; int len = 0; //边读边写 while ((len = fileInputStream.read(buf)) != -1) { objectOutputStream.write(buf, 0, len); } System.out.println("文件上传成功!"); objectOutputStream.flush(); objectOutputStream.close(); fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { Client client = new Client(); //教室ip为 192.168.1.114 //家的ip为192.168.31.83 192.168.56.1 client.sendFileName(IP, 8080, "E:\\soft"); client.readJSONFileNames(IP, 8081); client.upload(IP, 8083, client.JSONFileNames); } } Server代码: package com.dmdd.mywangpan; import com.sun.xml.internal.messaging.saaj.util.ByteInputStream; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Server { private static final int PORT = 8080; String JSONFileNames = ""; private static final String UPLOAD_DIR = "E:\\wanPanUpload\\"; /** * 通过客户端传来的文件名 遍历该文件下面的其他文件 */ public void serverListFiles() { System.out.println("服务器socket启动"); //创建服务器对象 try (ServerSocket server = new ServerSocket(PORT)) { //循环读取服务器接收客户端对象 Socket client = server.accept(); //创建对象输入流 ObjectInputStream is = new ObjectInputStream(client.getInputStream()); String fileName = is.readUTF(); //获取客户端传到的文件名 System.out.println("客户端传到的文件名为" + fileName); //通过文件名创建文件对象 File file = new File(fileName); //获取文件名下面的其他文件集合 File[] files = file.listFiles(); //将文件数组转换为类型为File的List数组 List Filefiles = Arrays.stream(files).collect(Collectors.toList()); //将List数组拼接为JSON字符串 //创建储存多种文件名字的json字符串 for (File file1 : Filefiles) { String name = file1.getName(); System.out.println(name); //拼接到JSONFileNames JSONFileNames += name; JSONFileNames += ","; } //文件1,文件2,文件3,文件4 String subStringJSON = JSONFileNames.substring(0, JSONFileNames.lastIndexOf(",")); System.out.println(subStringJSON); is.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 将json字符串发送给客户端 * * @param */ public void sendJson(String JSONFileNames) { try (ServerSocket serverSocket = new ServerSocket(8081)) { Socket client = serverSocket.accept(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(client.getOutputStream()); objectOutputStream.writeUTF(JSONFileNames); objectOutputStream.flush(); objectOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 获得上传的文件 * * @param */ public void getFile() { try (ServerSocket server = new ServerSocket(8083)) { //判断存储上传文件的文件夹是否存在 File file = new File(UPLOAD_DIR); if (!file.exists()) { System.out.println("上传文件夹不存在"); file.mkdir(); } Socket client = server.accept(); ObjectInputStream objectInputStream = new ObjectInputStream(client.getInputStream()); //获取文件名 String fileName = objectInputStream.readUTF(); //创建输出流 输出到文件夹里 FileOutputStream fileOutputStream = new FileOutputStream(UPLOAD_DIR + fileName); byte[] buf = new byte[1024]; int len = 0; //边读边写 while ((len = objectInputStream.read(buf)) != -1) { fileOutputStream.write(buf, 0, len); } System.out.println("上传成功!请在" + UPLOAD_DIR + fileName + "查看"); objectInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Server server = new Server(); server.serverListFiles(); server.sendJson(server.JSONFileNames); server.getFile(); } }

主要操作就是流的运用,没有啥难度,该程序是方便大伙对socket的理解。注释写的很详细了,可以直接创建两个类将代码跑起来,给同学们看看效果,装装杯。让男同学仰慕你,让女同学爱上你



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3