Java怎么利用Socket和IO流实现文件的上传与下载
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要介绍了Java怎么利用Socket和IO流实现文件的上传与下载的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么利用Socket和IO流实现文件的上传
千家信息网最后更新 2025年11月09日Java怎么利用Socket和IO流实现文件的上传与下载
这篇文章主要介绍了Java怎么利用Socket和IO流实现文件的上传与下载的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么利用Socket和IO流实现文件的上传与下载文章都会有所收获,下面我们一起来看看吧。
核心技术
1、TCP
2、Socket
3、FileInputStream与FileOutputStream
4、DataInputStream与DataOutputStream
5、多线程
Config
package com.io14;/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */public class Config { public static final String ip = "localhost"; public static final int port = 10088;}Client
package com.io14;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */public class Client { public static void main(String arg[]) { testDownload(); } public static void testUpload() { String filePath = "D:" + File.separator + "beauty.jpg"; Client client = new Client(); client.uploadFile(filePath); } public static void testDownload() { Client client = new Client(); client.downloadFile(); } public void uploadFile(String filePath) { try { // 创建待上传文件对象 File file = new File(filePath); String fileName = file.getName(); long fileLength = file.length(); System.out.println("客户端待上传文件:" + fileName + ",其大小为:" + fileLength); // 创建FileInputStream FileInputStream fileInputStream = new FileInputStream(filePath); // 创建Socket对象 Socket socket = new Socket(Config.ip, Config.port); // 从Socket获取OutputStream OutputStream outputStream = socket.getOutputStream(); // 创建DataOutputStream DataOutputStream dataOutputStream = new DataOutputStream(outputStream); // 利用DataOutputStream写出文件名和文件大小 dataOutputStream.writeUTF(fileName); dataOutputStream.writeLong(fileLength); dataOutputStream.flush(); // IO流读写操作 byte[] buf = new byte[1024 * 1]; int len = 0; while ((len = fileInputStream.read(buf)) != -1) { dataOutputStream.write(buf, 0, len); } // 释放资源 dataOutputStream.flush(); fileInputStream.close(); socket.close(); } catch (Exception e) { System.out.println(e.toString()); } } public void downloadFile() { try { // 创建Socket对象 Socket socket = new Socket(Config.ip, Config.port); // 从Socket获取InputStream InputStream inputStream = socket.getInputStream(); // 创建DataInputStream对象 DataInputStream dataInputStream = new DataInputStream(inputStream); // 获取下载文件的文件名和文件大小 String fileName = dataInputStream.readUTF(); long fileLength = dataInputStream.readLong(); System.out.println("客户端下载文件:" + fileName + ",其大小为:" + fileLength); // 组拼文件保存路径 String fileDir = "D:"; String filePath = fileDir + File.separator + fileName; // 创建FileOutputStream对象 FileOutputStream fileOutputStream = new FileOutputStream(filePath); // IO流读写操作 byte[] buf = new byte[1024 * 1]; int len = 0; while ((len = dataInputStream.read(buf)) != -1) { fileOutputStream.write(buf, 0, len); } // 释放资源 fileOutputStream.flush(); fileOutputStream.close(); dataInputStream.close(); socket.close(); } catch (Exception e) { System.out.println(e.toString()); } }}
Server
package com.io14;import java.net.ServerSocket;import java.net.Socket;/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */public class Server { public static void main(String arg[]) { testDownload(); } public static void testUpload() { Server server = new Server(); server.handleUploadFile(); } public static void testDownload() { Server server = new Server(); server.handleDownloadFile(); } public void handleUploadFile() { try { // 创建ServerSocket对象 ServerSocket serverSocket = new ServerSocket(Config.port); while (true) { // 接收客户端连接请求 Socket socket = serverSocket.accept(); // 开启子线程处理文件上传 UploadRunnableImpl uploadRunnableImpl = new UploadRunnableImpl(socket); Thread thread = new Thread(uploadRunnableImpl); thread.start(); } } catch (Exception e) { System.out.println(e.toString()); } } public void handleDownloadFile() { try { // 创建ServerSocket对象 ServerSocket serverSocket = new ServerSocket(Config.port); while (true) { // 接收客户端连接请求 Socket socket = serverSocket.accept(); // 开启子线程处理文件下载 DownloadRunnableImpl downloadRunnableImpl = new DownloadRunnableImpl(socket); Thread thread = new Thread(downloadRunnableImpl); thread.start(); } } catch (Exception e) { System.out.println(e.toString()); } }}
UploadRunnableImpl
package com.io14;import java.io.DataInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.Socket;/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */public class UploadRunnableImpl implements Runnable { private Socket socket; public UploadRunnableImpl(Socket socket) { this.socket = socket; } @Override public void run() { try { // 从Socket获取InputStream InputStream inputStream = socket.getInputStream(); // 创建DataInputStream对象 DataInputStream dataInputStream = new DataInputStream(inputStream); // 获取上传文件的文件名和文件大小 String fileName = dataInputStream.readUTF(); long fileLength = dataInputStream.readLong(); System.out.println("服务端接收上传文件:"+fileName+",其大小为:"+fileLength); // 组拼文件保存路径 String fileDir = "E:"; String filePath= fileDir + File.separator+fileName; // 创建FileOutputStream对象 FileOutputStream fileOutputStream = new FileOutputStream(filePath); // IO流读写操作 byte[] buf = new byte[1024*1]; int len = 0; while ((len = dataInputStream.read(buf)) != -1) { fileOutputStream.write(buf, 0, len); } // 释放资源 fileOutputStream.flush(); fileOutputStream.close(); dataInputStream.close(); socket.close(); } catch (Exception e) { System.out.println(e.toString()); } }}DownloadRunnableImpl
package com.io14;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import java.net.Socket;/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */public class DownloadRunnableImpl implements Runnable{ private Socket socket; public DownloadRunnableImpl(Socket socket) { this.socket = socket; } @Override public void run() { try { // 创建待下载文件对象 String filePath = "E:"+File.separator+"beauty.jpg"; File file = new File(filePath); String fileName = file.getName(); long fileLength = file.length(); System.out.println("服务端待下载文件:" + fileName + ",其大小为:" + fileLength); // 创建FileInputStream FileInputStream fileInputStream = new FileInputStream(filePath); // 从Socket获取OutputStream OutputStream outputStream = socket.getOutputStream(); // 创建DataOutputStream DataOutputStream dataOutputStream = new DataOutputStream(outputStream); // 利用DataOutputStream写出文件名和文件大小 dataOutputStream.writeUTF(fileName); dataOutputStream.writeLong(fileLength); dataOutputStream.flush(); // IO流读写操作 byte[] buf = new byte[1024 * 1]; int len = 0; while ((len = fileInputStream.read(buf)) != -1) { dataOutputStream.write(buf, 0, len); } // 释放资源 dataOutputStream.flush(); fileInputStream.close(); socket.close(); } catch (Exception e) { System.out.println(e.toString()); } }}关于"Java怎么利用Socket和IO流实现文件的上传与下载"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Java怎么利用Socket和IO流实现文件的上传与下载"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
文件
对象
大小
作者
博客
地址
小弟
客户
客户端
文件名
资源
知识
线程
内容
篇文章
路径
处理
服务
价值
技术
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
戴尔服务器怎么拆开
中国互联网络技术环境分析
数据库中插入字段语句
快递点网络安全检查
深圳软件开发公司哪家专业
数据库设计基本概念理解
lolc9哪个服务器
长春软件开发不错吉网传媒
海康服务器硬件
qq用户管理数据库结构
网络名人数据库
遵化海航软件开发常见问题
汽车电子控制软件开发公司
网络安全性排名
校外网络安全教育
计算机网络技术自我评价
数据库嵌入信息
英文版数据库下载
服务重启sql数据库
网络安全走进校园作文的题目
汕头app软件开发收费
深圳市排队网络技术51
芯片文献数据库
河南有什么服务器租用云主机
美国是网络安全的
数据库中表示半连接的关系表达式
服务器不响应http请求不返回
内蒙古专业软件开发服务应用
学习网络安全八条禁令
信息与网络技术工程师