is = sc.getInputStream(); DataInputStream dis = new DataInputStream(is); int totalLength = dis.readInt(); // 创建一个256字节的数组来保存文件名的字节信息 byte[] data = new byte[256]; // 把字节数组 解析为文件名 dis.readFully(data); // 解析出文件名,并去除末尾的空格 String filename = new String(data).trim(); // 余下的是文件内容 data = new byte[totalLength - 9 - 256]; // 读入文件的字节 dis.readFully(data); // 保存文件到当前目录下 FileOutputStream fos = new FileOutputStream(filename); fos.write(data); fos.flush(); fos.close(); System.out.println("文件下载完成");改为从服务端下载到客户端
时间: 2024-03-24 07:41:22 浏览: 91
浅谈图片上传利用request.getInputStream()获取文件流时遇到的问题
这段代码是一个服务器向客户端传输文件的代码,需要修改为从服务端下载到客户端的代码,可以参考以下实现:
1. 客户端向服务端发送文件名请求
2. 服务端收到请求后,读取文件内容并发送给客户端
3. 客户端接收到文件内容后,保存文件到本地
以下是修改后的代码示例:
客户端:
```java
Socket socket = new Socket("localhost", 8888);
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
// 发送文件名请求
dos.writeUTF("test.txt");
// 接收文件内容
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
int totalLength = dis.readInt();
byte[] data = new byte[totalLength];
dis.readFully(data);
// 保存文件到本地
FileOutputStream fos = new FileOutputStream("test.txt");
fos.write(data);
fos.flush();
fos.close();
socket.close();
System.out.println("文件下载完成");
```
服务端:
```java
ServerSocket serverSocket = new ServerSocket(8888);
while (true) {
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
// 接收文件名请求
String filename = dis.readUTF();
// 读取文件内容
File file = new File(filename);
byte[] data = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(data);
// 发送文件内容
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeInt(data.length);
dos.write(data);
dos.flush();
socket.close();
}
```
阅读全文