客户端:

文件上传案例的客户端:读取本地文件,上传到服务器,读取服务器回写的数据

明确:
数据源:c:\1.jpg
目的地:服务器

实现步骤:
1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
2.创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号
3.使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象
4.使用本地字节输入流FileInputStream对象中的方法read,读取本地文件
5.使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器
6.使用Socket中的方法getInputStream,获取网络字节输入流InputStream对象
7.使用网络字节输入流InputStream对象中的方法read读取服务回写的数据
8.释放资源(FileInputStream,Socket)

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class TCPClient {public static void main(String[] args) throws IOException {//1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源FileInputStream fis = new FileInputStream("c:\\1.jpg");//2.创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号Socket socket = new Socket("127.0.0.1",8888);//3.使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象OutputStream os = socket.getOutputStream();//4.使用本地字节输入流FileInputStream对象中的方法read,读取本地文件int len = 0;byte[] bytes = new byte[1024];while((len = fis.read(bytes))!=-1){//5.使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器os.write(bytes,0,len);}/*解决:上传完文件,给服务器写一个结束标记void shutdownOutput() 禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。*/socket.shutdownOutput();//6.使用Socket中的方法getInputStream,获取网络字节输入流InputStream对象InputStream is = socket.getInputStream();//7.使用网络字节输入流InputStream对象中的方法read读取服务回写的数据while((len = is.read(bytes))!=-1){System.out.println(new String(bytes,0,len));}//8.释放资源(FileInputStream,Socket)fis.close();socket.close();}
}

服务端:

文件上传案例服务器端:读取客户端上传的文件,保存到服务器的硬盘,给客户端回写"上传成功"

明确:
数据源:客户端上传的文件
目的地:服务器的硬盘 d:\upload\1.jpg

实现步骤:
1.创建一个服务器ServerSocket对象,和系统要指定的端口号
2.使用ServerSocket对象中的方法accept,获取到请求的客户端Socket对象
3.使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象
4.判断d:\upload文件夹是否存在,不存在则创建
5.创建一个本地字节输出流FileOutputStream对象,构造方法中绑定要输出的目的地
6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件
7.使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存到服务器的硬盘上
8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象
9.使用网络字节输出流OutputStream对象中的方法write,给客户端回写"上传成功"
10.释放资源(FileOutputStream,Socket,ServerSocket)

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;public class TCPServer {public static void main(String[] args) throws IOException {//1.创建一个服务器ServerSocket对象,和系统要指定的端口号ServerSocket server = new ServerSocket(8888);//2.使用ServerSocket对象中的方法accept,获取到请求的客户端Socket对象/*让服务器一直处于监听状态(死循环accept方法)有一个客户端上传文件,就保存一个文件*/while(true){Socket socket = server.accept();/*使用多线程技术,提高程序的效率有一个客户端上传文件,就开启一个线程,完成文件的上传*/new Thread(new Runnable() {//完成文件的上传@Overridepublic void run() {try {//3.使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象InputStream is = socket.getInputStream();//4.判断d:\\upload文件夹是否存在,不存在则创建File file =  new File("d:\\upload");if(!file.exists()){file.mkdirs();}/*自定义一个文件的命名规则:防止同名的文件被覆盖规则:域名+毫秒值+随机数*/String fileName = "itcast"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";//5.创建一个本地字节输出流FileOutputStream对象,构造方法中绑定要输出的目的地//FileOutputStream fos = new FileOutputStream(file+"\\1.jpg");FileOutputStream fos = new FileOutputStream(file+"\\"+fileName);//6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件int len =0;byte[] bytes = new byte[1024];while((len = is.read(bytes))!=-1){//7.使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存到服务器的硬盘上fos.write(bytes,0,len);}//8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象//9.使用网络字节输出流OutputStream对象中的方法write,给客户端回写"上传成功"socket.getOutputStream().write("上传成功".getBytes());//10.释放资源(FileOutputStream,Socket,ServerSocket)fos.close();socket.close();}catch (IOException e){System.out.println(e);}}}).start();}//服务器就不用关闭//server.close();}
}

如有错误欢迎指正

Java网络编程实现文件上传和下载案例详解相关推荐

  1. JS - 文件上传组件WebUploader使用详解1(带进度的文件上传

    一.基本介绍 1,什么是 WebUploader? WebUploader 是由百度公司团队开发的一个以 HTML5 为主,FLASH 为辅的现代文件上传组件. 官网地址:http://fex.bai ...

  2. 转 虫师的selenium借助AutoIt识别上传(下载)详解

    selenium借助AutoIt识别上传(下载)详解 2014-12-27 11:26 by 虫师, 755 阅读, 1 评论, 收藏,  编辑 AutoIt目前最新是v3版本,这是一个使用类似BAS ...

  3. Java操作FastDFS实现文件上传和下载

    前言:在GItHub上(地址:https://github.com/happyfish100),作者提供了fastdfs-client-java源码,源码里面提供了操作FastDFS的工具类,所以我们 ...

  4. 【运维】PowerShell编程 目录文件相关方法的封装与案例详解

    PowerShell 目录文件管理 目录文件相关方法的封装与案例详解 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?type=blog 邮箱 :291 ...

  5. 【java笔记】网络编程:文件上传案例

    原理:文件的复制 客户端读取本地的文件,把文件上传到服务器,服务器把上传的文件保存到服务器的硬盘上 步骤: 1.客户端使用本地的字节输入流,读取要上传的文件 2.客户端使用网路字节输出流,把读取的文件 ...

  6. java实现基于AmazonS3文件上传、下载、删除操作

    1.创建工具类 AwsS3Utils import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientExcept ...

  7. java struts 读取文件,java中Struts2 的文件上传和下载示例

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  8. java dispo lock_java实现文件上传和下载(1)

    原理: 使用html 的 标签,提交form 的几个属性必须为: method=post encType=multipart/form-data; 组件:smartUpload或者commons fi ...

  9. 使用SpringMVC模拟文件上传与下载案例

    文件上传下载 SpringMVC封装了Tomcat的上传文件功能 MultipartResolver接口 MultipartResolver接口定义了文件上传过程中的相关操作,并对通用性操作进行了封装 ...

最新文章

  1. Android之Providing Resources(提供资源)
  2. R语言聚类算法的应用实例
  3. Java 实现 Trie (前缀树)
  4. 手工备份与还原Windows8激活文件
  5. android videoview属性,Android VideoView
  6. 帆软独家:数字化转型打造企业数据战斗力
  7. 经典面试题(11):关于变量提升,以下代码将输出什么?
  8. 关于MUI框架中,“侧滑导航“之“div模式下拉菜单“的a标签(超链接)的失效问题?
  9. 树状数组萌新讲解+基础习题【一点一滴】
  10. Solr部分更新MultiValued的Date日期字段时报错及解决方案:Invalid Date String:‘Mon Sep 14 01:48:38 CST 2015‘
  11. java哪个软件编程好学吗_自学编程:Java和C语言相比哪个好?哪个更值得学习?...
  12. 如果一非零的整系数多项式能够分解成两个次数较低的有理系数多项式的乘积,那么它一定能分解成两个次数较低的整系数多项式的乘积
  13. 【笔记】Windows Sublime text安装json格式化插件SublimePrettyJson
  14. c语言程序书写时每行必须有行号,C语言阶段复习一.doc
  15. 测试自学人必看:软件测试如何找测试项目?
  16. C++ 类的封装继承多态
  17. Unity Shader - 车漆效果(基于MatCap)
  18. 【华为OD机试真题 JAVA】勾股数元组【2022 Q4 | 100分】
  19. matlab生成全黑图片,程序第一次可以运行,第二次运行图片是全黑的
  20. 如何保存google的壁纸

热门文章

  1. Aspose.Word企业案例:FLIGHTMAP 使用 API 在 Web 中将网格数据导出到 Excel、MS Word、PDF 和 PowerPoint
  2. Horde profession of WOWChina-Quote from nagcn.com
  3. linux下 批量替换文件内容
  4. 简单双向LSTM模型实战项目
  5. 华为微信平行世界怎么添加服务器,华为实现手机和平板“微信双登”:配合“平行视界”独创玩法...
  6. 检测和解决Android应用的性能问题
  7. (一篇就够)git原理深入理解
  8. 书评《HTTP权威指南》
  9. java 字符串 复制_Java字符串复制
  10. 小米手机突然微信双开不好用了!重置就好了!