• 上传文件给服务器端。


    客户端:

    package UDP;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner;

    public class Demo04_Client3 {
    public static void main(String[] args) throws UnknownHostException, IOException {
    File file = getFile();
    /**
    * 2.发送文件名到服务端
    */
    Socket s = new Socket("127.0.0.1", 54321);
    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    PrintStream ps = new PrintStream(s.getOutputStream());
    ps.println(file.getName());
    /**
    * 3.接收结果,如果存在给予提示,程序直接退出
    */
    String result = br.readLine();
    if ("存在".equals(result)) {
    System.out.println("您上传的文件已经存在,请不要重复上传");
    s.close();
    return;// 代码结束执行
    }
    /**
    * FileInputStream只能读取本地文件
    * 4.如果不存在,定义FileInputStream读取文件,写出到网络 FileInputStream是字节流,可以读取任意文件,文本、音频、视频。
    */

    FileInputStream fis = new FileInputStream(file);
    byte[] arr = new byte[8192];// 创建一个缓冲区
    int len;
    while ((len = fis.read(arr)) != -1) {
    ps.write(arr, 0, len);// 从这个字节数组中从0开始写len个出去到服务器端
    }
    fis.close();
    s.close();
    }

    /**
    * 1.提示输入要上传的文件路径,验证路径是否存在以及是否是文件夹
    *
    * @return
    */
    private static File getFile() {
    Scanner sc = new Scanner(System.in);// 创建键盘录入对象
    System.out.println("请输入文件路径");
    while (true) {
    String line = sc.nextLine();
    File file = new File(line);
    if (file.exists()) {
    System.out.println("您录入的文件路径不存在,请重新录入");
    } else if (file.isDirectory()) {
    System.out.println("您录入的是文件夹路径,请输入一个文件路径");
    } else {
    return file;
    }
    }
    }
    }

    服务端:

    package UDP;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;


    public class Demo04_Server3 {
    public static void main(String[] args) throws IOException {
    /**
    * 1.创建多线程的服务器
    */
    ServerSocket so = new ServerSocket(54321);
    System.out.println("服务器启动,绑定54321端口");
    /**
    * BufferedReader读取的是字符 2.读取文件名
    */
    while (true) {
    Socket socket = so.accept();
    new Thread() {
    public void run() {
    try {
    InputStream is = socket.getInputStream();// 字节流
    BufferedReader bs = new BufferedReader(new InputStreamReader(is));
    PrintStream ps = new PrintStream(socket.getOutputStream());
    String fileName = bs.readLine();// 读取客户端传过来的文件名
    // 3.判断文件是否存在,将结果返回给客户端
    File dir = new File("update");// 创建父级路径
    dir.mkdir();// 在父级路径创建文件夹
    File file = new File(dir, fileName);// 封装成file对象,将客户端传过来的文件放在父级路径下
    if (file.exists()) {// 判断文件路径是否存在
    ps.println("存在");// 给客户端返回"存在"提示信息
    socket.close(); // 关闭socket
    return;
    } else {
    ps.println("不存在");
    }
    // 4.定义FileOutputStream,从网络读取到数据,存储到本地
    FileOutputStream fos = new FileOutputStream(file);
    byte[] arr = new byte[8192];
    int len;
    while ((len = is.read(arr)) != -1) {
    fos.write(arr, 0, len);
    }
    fos.close();
    socket.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }.start();
    }
    }
    }

    添加微信进交流群: opiopi293
  • 相关阅读:
    需求规格说明书
    需求规格说明书模板0.2版本
    需求规格说明书模板0.1版本
    万事开头难,团队一起盘!!
    工程开始了!(2019-03-04)
    SpringBoot RESTful API返回统一数据格式还不懂?
    Springboot读取配置文件中的属性
    java本地缓存的使用
    解决github访问不了和慢的问题2021-06-27
    Oracle DDL
  • 原文地址:https://www.cnblogs.com/wf293/p/14766351.html
Copyright © 2020-2023  润新知