Java 将文件从客户端复制到服务器
我试图用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()) 您需要
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();
}
}