Java 实现局域网拷贝文件

作为一名经验丰富的开发者,我将教会你如何使用Java实现局域网拷贝文件的功能。

流程概述

下面是实现局域网拷贝文件的流程概述:

  1. 创建一个服务端程序,监听指定的端口。
  2. 创建一个客户端程序,连接服务端。
  3. 服务端接收客户端连接请求,并等待接收文件。
  4. 客户端选择要拷贝的文件,并发送给服务端。
  5. 服务端接收文件,并保存到指定目录。

下面是一个甘特图,展示了整个流程的步骤和时间安排。

gantt
    dateFormat  YYYY-MM-DD
    title 实现局域网拷贝文件流程甘特图
    section 创建服务端
    创建服务端     : 2021-01-01, 1d
    section 创建客户端
    创建客户端     : 2021-01-02, 1d
    section 连接服务端
    连接服务端     : 2021-01-03, 1d
    section 发送文件
    选择要拷贝的文件 : 2021-01-04, 1d
    发送文件       : 2021-01-05, 1d
    section 接收文件
    接收文件       : 2021-01-06, 1d

详细步骤

1. 创建服务端

首先,在你的项目中创建一个服务端程序,用于监听客户端的连接请求。可以使用Java的Socket类来实现。下面是一个示例代码:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888); // 监听指定端口
            System.out.println("服务端已启动,等待客户端连接...");

            while (true) {
                Socket socket = serverSocket.accept(); // 等待客户端连接
                System.out.println("客户端已连接:" + socket.getInetAddress());
                // 接收文件的逻辑代码
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 创建客户端

接下来,创建一个客户端程序,用于连接服务端。同样使用Java的Socket类来实现。下面是一个示例代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1", 8888); // 连接服务端
            System.out.println("已连接服务端:" + socket.getInetAddress());

            // 发送文件的逻辑代码
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 接收文件

在服务端接收文件的逻辑中,可以使用Java的IO流来实现。下面是一个示例代码:

import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;

public class Server {
    // ...

    while (true) {
        Socket socket = serverSocket.accept(); // 等待客户端连接
        System.out.println("客户端已连接:" + socket.getInetAddress());

        try {
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            String fileName = dis.readUTF(); // 读取文件名
            long fileSize = dis.readLong(); // 读取文件大小

            FileOutputStream fos = new FileOutputStream("/path/to/save/" + fileName);

            byte[] buffer = new byte[4096];
            int bytesRead;
            long totalBytesRead = 0;

            while ((bytesRead = dis.read(buffer)) != -1) {
                fos.write(buffer, 0, bytesRead);
                totalBytesRead += bytesRead;
                // 更新进度
            }

            System.out.println("文件接收完成:" + fileName);
            fos.close();
            dis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // ...
}

4. 发送文件

在客户端发送文件的逻辑中,同样使用Java的IO流来实现。下面是一个示例代码:

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;

public class Client {
    // ...

    try {
        DataOutputStream