JAVA局域网文件传输工具
引言
在日常工作中,我们经常需要在局域网内进行文件的传输,比如将文件从一台电脑传输到另一台电脑,或者将文件从电脑传输到手机等。虽然现在有很多云存储服务可以方便地进行文件传输,但有时我们仍然需要通过局域网进行传输,比如在一些特殊网络环境下无法正常使用云存储服务时。
本文将介绍如何使用Java编写一个局域网文件传输工具,通过该工具可以轻松地在局域网内进行文件的传输。我们将使用Java的Socket编程来实现文件的传输,这是一种常用的网络通信方式。
功能需求
我们的局域网文件传输工具需要具备以下基本功能:
- 可以在局域网内的两台电脑之间进行文件的传输;
- 支持选择需要传输的文件,并将文件传输到指定的目标电脑;
- 支持指定目标电脑的IP地址和端口号;
- 支持显示文件传输的进度。
设计思路
我们将使用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