Java怎么利用Socket和IO流实现文件的上传与下载
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了Java怎么利用Socket和IO流实现文件的上传与下载的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么利用Socket和IO流实现文件的上传
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
新华互联网科技
华服互联网科技怎么样
中关村互联网 科技集团
蓝思科技飞鸽互联网
鸠鸠互联网科技
互联网科技公司税收优惠
互联网品科技
互联网科技logo
深圳前海聚择互联网科技有限公司
新华互联网科技2019
互联网时代科技改变生活
科技互联网大厂
洛阳共同富裕互联网科技有限公司
南博望互联网科技有限公司
无锡工业互联网科技有限公司
广州百诚互联网科技有限公司官网
互联网科技快讯热点
上海同邻互联网科技有限公司规模
互联网科技机房
互联网科技职业技能培训学校
广州淘业互联网络科技
互联网佳科技有限公司
狮子座互联网科技
唐信互联网科技
广州宏创互联网科技
新华互联网科技校企合作
中国最先进互联网科技公司
湖北码尼互联网科技有限公司电话
烟台灵鸽互联网科技有限公司
互联网科技快讯热点