Java服务器文件共享

简介

在计算机网络中,文件共享是指多个计算机之间共享文件资源,方便用户之间的文件传输和共享。Java提供了一些API和库来实现服务器端的文件共享功能。本文将介绍如何使用Java实现一个简单的服务器文件共享功能,并提供相应的代码示例。

流程图

flowchart TD
    A[启动服务器] --> B[监听端口]
    B --> C[接受客户端请求]
    C --> D[处理客户端请求]
    D --> E[发送文件]
    D --> F[接收文件]
    E --> C
    F --> C

类图

classDiagram
    class Server {
        +start() : void
        +listenPort(port: int) : void
        +acceptClient() : void
        +handleRequest(client: Socket) : void
        +sendFile(client: Socket, file: File) : void
        +receiveFile(client: Socket, file: File) : void
    }

代码示例

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

public class Server {
    private ServerSocket serverSocket;
    private static final int PORT = 8888;

    public static void main(String[] args) {
        Server server = new Server();
        server.start();
    }

    public void start() {
        try {
            serverSocket = new ServerSocket(PORT);
            System.out.println("服务器已启动,等待客户端连接...");
            listenPort();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void listenPort() {
        while (true) {
            try {
                Socket clientSocket = serverSocket.accept();
                System.out.println("客户端连接成功,IP地址:" + clientSocket.getInetAddress() +
                        ",端口号:" + clientSocket.getPort());
                handleRequest(clientSocket);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void handleRequest(Socket client) {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            PrintWriter writer = new PrintWriter(client.getOutputStream(), true);

            String request = reader.readLine();
            if (request.equals("GET")) {
                String fileName = reader.readLine();
                File file = new File(fileName);
                if (file.exists()) {
                    sendFile(client, file);
                } else {
                    writer.println("File not found");
                }
            } else if (request.equals("POST")) {
                String fileName = reader.readLine();
                File file = new File(fileName);
                receiveFile(client, file);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void sendFile(Socket client, File file) {
        try {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
            OutputStream os = client.getOutputStream();

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = bis.read(buffer)) != -1) {
                os.write(buffer, 0, bytesRead);
            }

            os.flush();
            bis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void receiveFile(Socket client, File file) {
        try {
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
            InputStream is = client.getInputStream();

            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = is.read(buffer)) != -1) {
                bos.write(buffer, 0, bytesRead);
            }

            bos.flush();
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论

通过上述示例代码,我们可以看到如何使用Java实现一个简单的服务器文件共享功能。在该示例中,我们使用了ServerSocket类来监听指定端口并接受客户端连接,通过Socket类来进行数据的传输。当客户端发送"GET"请求时,服务器会将文件发送给客户端;当客户端发送"POST"请求时,服务器会接收客户端发送的文件。

使用Java实现服务器文件共享功能可以方便地实现文件的传输和共享,同时也为其他应用提供了基础功能。在实际应用中,可以根据需求进行更多的功能扩展和优化,例如添加身份验证、文件加密等功能。希望本文对你理解和使用Java服务器文件共享功能有所帮助。