JAVA局域网文件传输工具

引言

在日常工作中,我们经常需要在局域网内进行文件的传输,比如将文件从一台电脑传输到另一台电脑,或者将文件从电脑传输到手机等。虽然现在有很多云存储服务可以方便地进行文件传输,但有时我们仍然需要通过局域网进行传输,比如在一些特殊网络环境下无法正常使用云存储服务时。

本文将介绍如何使用Java编写一个局域网文件传输工具,通过该工具可以轻松地在局域网内进行文件的传输。我们将使用Java的Socket编程来实现文件的传输,这是一种常用的网络通信方式。

功能需求

我们的局域网文件传输工具需要具备以下基本功能:

  1. 可以在局域网内的两台电脑之间进行文件的传输;
  2. 支持选择需要传输的文件,并将文件传输到指定的目标电脑;
  3. 支持指定目标电脑的IP地址和端口号;
  4. 支持显示文件传输的进度。

设计思路

我们将使用Java的Socket编程来实现文件的传输。在传输过程中,我们将通过建立一个TCP连接来进行数据传输。其中,一台电脑将作为服务器端,另一台电脑将作为客户端。

服务器端将监听指定的端口,等待客户端的连接请求。当客户端连接成功后,服务器端将接收客户端发送的文件,并保存在指定的目录下。客户端将选择需要传输的文件,并将文件发送给服务器端。

为了实现传输过程的进度显示,我们可以使用Java的多线程技术。服务器端和客户端分别启动一个线程来处理文件传输过程,这样可以保证传输过程不会阻塞主线程,同时可以实时显示传输的进度。

类图

使用mermaid语法绘制类图如下:

classDiagram
    class Server {
        -port: int
        -directory: String
        -serverSocket: ServerSocket
        -socket: Socket
        -inputStream: InputStream
        -outputStream: OutputStream
        -fileInputStream: FileInputStream
        -bufferedInputStream: BufferedInputStream
        -bufferedOutputStream: BufferedOutputStream
        +Server(port: int, directory: String)
        +start(): void
        +run(): void
        +receiveFile(): void
        +showProgress(bytesTransferred: long, fileSize: long): void
        +close(): void
    }

    class Client {
        -ipAddress: String
        -port: int
        -file: File
        -socket: Socket
        -inputStream: InputStream
        -outputStream: OutputStream
        -fileInputStream: FileInputStream
        -bufferedInputStream: BufferedInputStream
        -bufferedOutputStream: BufferedOutputStream
        +Client(ipAddress: String, port: int, file: File)
        +start(): void
        +run(): void
        +sendFile(): void
        +showProgress(bytesTransferred: long, fileSize: long): void
        +close(): void
    }

    Server --* Socket
    Server --* InputStream
    Server --* OutputStream
    Server --* FileInputStream
    Server --* BufferedInputStream
    Server --* BufferedOutputStream

    Client --* Socket
    Client --* InputStream
    Client --* OutputStream
    Client --* FileInputStream
    Client --* BufferedInputStream
    Client --* BufferedOutputStream

代码实现

接下来我们将根据上述设计思路,使用Java编写局域网文件传输工具的代码。

Server.java

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

public class Server extends Thread {
    private int port;
    private String directory;
    private ServerSocket serverSocket;
    private Socket socket;
    private InputStream inputStream;
    private OutputStream outputStream;
    private FileInputStream fileInputStream;
    private BufferedInputStream bufferedInputStream;
    private BufferedOutputStream bufferedOutputStream;

    public Server(int port, String directory) {
        this.port = port;
        this.directory = directory;
    }

    public void start() {
        try {
            serverSocket = new ServerSocket(port);
            System.out.println("服务器已启动,等待连接...");
            socket = serverSocket.accept();
            System.out.println("客户端已连接");

            inputStream = socket.getInputStream();
            fileInputStream = new FileInputStream(directory