Java怎么利用Socket和IO流实现文件的上传与下载
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍了Java怎么利用Socket和IO流实现文件的上传与下载的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么利用Socket和IO流实现文件的上传
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
gis数据库建库需要哪些条件
福清哪里有软件开发
网页代理服务器ip
mio服务器声卡
1363协议使用什么软件开发
数据库维护教材代码
顺义区网络软件开发包括什么
浅析数据库安全及防范策略
数据库应用技术第一版购买
什么是excel软件开发
幼儿网络安全课视频
互联网算科技公司吗
网络安全工程师是哪个专业
霞浦县网络技术推广部联系电话
软件开发合同属于什么案由
网络安全隐患的原因有哪些
软件开发项目的分包
数据库基础与实践技术的疑惑
软件开发中常用的英语名词
怎样降低网络安全等级
分布式数据库安全性
黑客网络安全新闻
衢州海量软件开发
学校 网络安全预案
腾讯云的云数据库怎么用
三级网络技术押题
我的世界免费服务器电脑版下载
网络安全书签教学视频
如何管理上万台服务器
手机软件开发前