Java 将文件从客户端复制到服务器

Java 将文件从客户端复制到服务器,java,file-upload,client-server,Java,File Upload,Client Server,我试图用Java将文件从客户端复制到服务器,如下所示: 客户端: 服务器: 当我跑步时,我得到: run: BUILD SUCCESSFUL (total time: 0 seconds) 但是什么也没发生。这是我第一次使用客户机服务器,我不确定我出了什么问题 请帮忙。谢谢。代码中的一些问题是: 对于客户机,您已经在catch块中编写了整个代码,除非发生异常,否则catch块将无法工作 您试图在此处传递文件名,而不是文件名 oos.writeObject(file.getName()) 您需要

我试图用Java将文件从客户端复制到服务器,如下所示:

客户端:

服务器:

当我跑步时,我得到:

run:
BUILD SUCCESSFUL (total time: 0 seconds)
但是什么也没发生。这是我第一次使用客户机服务器,我不确定我出了什么问题


请帮忙。谢谢。

代码中的一些问题是:

对于客户机,您已经在catch块中编写了整个代码,除非发生异常,否则catch块将无法工作

您试图在此处传递文件名,而不是文件名

oos.writeObject(file.getName())

您需要先运行服务器,然后运行客户端。 下面是一个示例工作代码:

客户:

public class Client {

    public static void main(String[] args) throws Exception {
        String fileName = "C:\\2048.jpg";

        try {
            File file = new File(fileName);
            Socket socket = new Socket("localhost", 3332);
            byte[] mybytearray = new byte[(int) file.length()];
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
            bis.read(mybytearray, 0, mybytearray.length);
            OutputStream os = socket.getOutputStream();
            os.write(mybytearray, 0, mybytearray.length);
            os.flush();
            os.close();
        } catch (Exception e) {
        }

    }
}
服务器:

public class Server extends Thread {

    public static final int PORT = 3332;
    public static final int BUFFER_SIZE = 626;

    @Override
    public void run() {
        try {
            ServerSocket serverSocket = new ServerSocket(PORT);
            while (true) {
                Socket s = serverSocket.accept();
                saveFile(s);
            }
        } catch (Exception e) {
        }
    }

    private void saveFile(Socket socket) throws Exception {
        InputStream ois = socket.getInputStream();
        FileOutputStream fos = new FileOutputStream("C:\\2049.jpg");;

        byte[] mybytearray = new byte[1024];
        System.out.println("Reading file from server...");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int bytesRead;
        while ((bytesRead = ois.read(mybytearray)) != -1) {
            bos.write(mybytearray);
        }

        bos.close();
        System.out.println("Writing file complete...");

    }

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

您确定您的客户端文件正确吗?try块“不做任何事情”对我来说似乎有点可疑。我尝试了不同的文件,但什么也没发生。或者文件保存在哪里?我看过localhost,项目文件,但没有看到“我正试图将一个文件从客户端复制到服务器”,这一行是什么意思?是否试图从“D:\\6282.mp3”获取数据并在服务器控制台上打印输出?需要指定目标文件路径。有关如何在服务器端实现向目标文件写入的信息,请参阅本文。分而治之,在此之前,你必须:首先,确保你可以阅读你的客户文件的每一行。第二,确保您可以将信息发送到服务器谢谢您的回复。我按原样试用了您的代码,只是更改了
jpg
文件的名称。甚至使用了目的地,但仍然一无所获。我只获得
运行:构建成功(总时间:2秒)
。我可能做错了什么?请帮助。@user3189827您好,您必须先运行服务器,然后运行客户端。由于服务器是一个线程,它将一直运行,直到您停止它,并且您发送的所有文件都将写入您提供的目录(如“C:\\2049.jpg”)。如果在终端(cmd)上运行,则可能需要在saperate终端上同时运行
public class Client {

    public static void main(String[] args) throws Exception {
        String fileName = "C:\\2048.jpg";

        try {
            File file = new File(fileName);
            Socket socket = new Socket("localhost", 3332);
            byte[] mybytearray = new byte[(int) file.length()];
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
            bis.read(mybytearray, 0, mybytearray.length);
            OutputStream os = socket.getOutputStream();
            os.write(mybytearray, 0, mybytearray.length);
            os.flush();
            os.close();
        } catch (Exception e) {
        }

    }
}
public class Server extends Thread {

    public static final int PORT = 3332;
    public static final int BUFFER_SIZE = 626;

    @Override
    public void run() {
        try {
            ServerSocket serverSocket = new ServerSocket(PORT);
            while (true) {
                Socket s = serverSocket.accept();
                saveFile(s);
            }
        } catch (Exception e) {
        }
    }

    private void saveFile(Socket socket) throws Exception {
        InputStream ois = socket.getInputStream();
        FileOutputStream fos = new FileOutputStream("C:\\2049.jpg");;

        byte[] mybytearray = new byte[1024];
        System.out.println("Reading file from server...");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int bytesRead;
        while ((bytesRead = ois.read(mybytearray)) != -1) {
            bos.write(mybytearray);
        }

        bos.close();
        System.out.println("Writing file complete...");

    }

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