java_网络编程之上传文件案例
初期成果:
客户端:
package FileUpload; import java.io.*; import java.net.Socket; import java.util.Scanner; public class Client { public static void main(String[] args) throws IOException { //1.让用户指定上传文件 System.out.println("请输入需要上传的文件"); Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); File file = new File(s); //2.判断文件是否存在并告知用户 if(!file.exists()){ System.out.println("对不起您指定的文件不村子啊"); return; }else{ //3.创建客户端并绑定服务器IP和端口号 Socket socket = new Socket("127.0.0.1", 8888); //4.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象 OutputStream outputStream = socket.getOutputStream(); //5.创建本地字节输入流读取文件 FileInputStream fis = new FileInputStream(file); //6.读取文件并通过网络传送到服务器 byte[] bytes = new byte[1024]; int len = 0; while ((len = fis.read(bytes))!=-1){ outputStream.write(bytes,0,len); } //6.1因为程序会阻塞所以使用shutdownOutput结束输出流 socket.shutdownOutput(); //7.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象 InputStream is = socket.getInputStream(); //8.使用网络字节输入流InputStream对象中的read读取服务器回写的数据 while ((len = is.read(bytes))!=-1){ System.out.println(new String(bytes,0,len)); } //释放资源 socket.close(); fis.close(); } } }
服务器端:
package FileUpload; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; public class ServerSocketTest { public static void main(String[] args) throws IOException { //1.创建服务器 ServerSocket serverSocket = new ServerSocket(8888); //2.判断服务器文件夹是否存在 File file = new File("E:\\aikang"); if (!file.exists()){ file.mkdirs(); } //3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket Socket socket = serverSocket.accept(); //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象 InputStream is = socket.getInputStream(); //5.获取本地输出流对象储存数据 FileOutputStream fos = new FileOutputStream(file+"\\"+System.currentTimeMillis()+new Random().nextInt()+".jpg"); //6.读取网络输入流对象的数据并输出到硬盘 byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes))!=-1){ fos.write(bytes,0,len); } //7.获取网络字节输出流回写给客户端提示 OutputStream os = socket.getOutputStream(); os.write("上传完成".getBytes()); //8.释放资源 serverSocket.close(); socket.close(); } }
第二次:优化服务器一直跑
服务器端:
package FileUpload; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; public class ServerSocketTest { public static void main(String[] args) throws IOException { //1.创建服务器 ServerSocket serverSocket = new ServerSocket(8888); //2.判断服务器文件夹是否存在 File file = new File("E:\\aikang"); if (!file.exists()){ file.mkdirs(); } //加while while (true){ //3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket Socket socket = serverSocket.accept(); //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象 InputStream is = socket.getInputStream(); //5.获取本地输出流对象储存数据 FileOutputStream fos = new FileOutputStream(file+"\\"+System.currentTimeMillis()+new Random().nextInt()+".jpg"); //6.读取网络输入流对象的数据并输出到硬盘 byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes))!=-1){ fos.write(bytes,0,len); } //7.获取网络字节输出流回写给客户端提示 OutputStream os = socket.getOutputStream(); os.write("上传完成".getBytes()); //8.释放资源 socket.close(); fos.close(); } } }
第三次优化:多用户同时上传使用多线程
package FileUpload; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; public class ServerSocketTest { public static void main(String[] args) throws IOException { //1.创建服务器 ServerSocket serverSocket = new ServerSocket(8888); //2.判断服务器文件夹是否存在 File file = new File("E:\\aikang"); if (!file.exists()){ file.mkdirs(); } //加while while (true){ //3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket Socket socket = serverSocket.accept(); //使用多线程 new Thread(new Runnable() { //完成文件上传 @Override public void run() { try {//4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象 InputStream is = socket.getInputStream(); //5.获取本地输出流对象储存数据 FileOutputStream fos = new FileOutputStream(file + "\\" + System.currentTimeMillis() + new Random().nextInt() + ".jpg"); //6.读取网络输入流对象的数据并输出到硬盘 byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes)) != -1) { fos.write(bytes, 0, len); } //7.获取网络字节输出流回写给客户端提示 OutputStream os = socket.getOutputStream(); os.write("上传完成".getBytes()); //8.释放资源 socket.close(); fos.close(); }catch (IOException e){ System.out.println(e); } } }).start(); } } }
java_网络编程之上传文件案例的更多相关文章
- Android 网络编程--上传文件及相应的参数到服务器
之前一直在做SiteCheck的项目,所用到的知识大部分都涉及到网络编程方面,所以现在有时间先把它的使用方法及一些注意事项记录下来.在这里我用两种例子让大家了解它的使用方法: (1)上传图片及相应参数 ...
- FTP文件操作之上传文件
上传文件是一个比较常用的功能,前段时间就做了一个上传图片的模块.开始采用的是共享文件夹的方式,后来发现这种方法不太好.于是果断将其毙掉,后来选择采用FTP的方式进行上传.个人感觉FTP的方式还是比较好 ...
- react native 之上传文件
最近遇到react native中需要上传一些图片到后台.期间,找了一些第三方上传插件,感觉不太好用,要么只支持一个平台,要么会对其他第三方造成影响,实在无奈.只能直接使用fetch上传.其中上传文件 ...
- 转:python webdriver API 之上传文件
文件上传操作也比较常见功能之一,上传功能操作 webdriver 并没有提供对应的方法,关键上传文件的思路.上传过程一般要打开一个系统的 window 窗口,从窗口选择本地文件添加.所以,一般会卡在如 ...
- Django之上传文件
使用Form表单上传文件 upload.html <!DOCTYPE html> <html lang="en"> <head> <met ...
- Android WebView那些坑之上传文件
最近公司项目需要在WebView上调用手机系统相册来上传图片,开发过程中发现在很多机器上无法正常唤起系统相册来选择图片. 解决问题之前我们先来说说WebView上传文件的逻辑:当我们在Web页面上点击 ...
- Flask入门之上传文件到服务器
今天要做一个简单的页面,可以实现将文件 上传到服务器(保存在指定文件夹) #Sample.py # coding:utf-8 from flask import Flask,render_templa ...
- LoadRunner开发ftp协议接口之上传文件脚本
Action() { //建立一个ftp对象 FTP ftp1=0; //建立FTP连接并登录 ftp_logon_ex(&ftp1,"ftpLogon", "U ...
- jQuery插件之上传文件ajaxfileupload.js源码与使用
在网页应用中,一般会用到上传文件或者图片什么的到服务器,那么可以用ajaxfileupload.js,但是在使用ajaxfileupload.js时候,当服务器返回的json带有&符号的时候, ...
随机推荐
- R语言 运算符
R语言运算符 运算符是一个符号,通知编译器执行特定的数学或逻辑操作. R语言具有丰富的内置运算符,并提供以下类型的运算符. 运算符的类型 R语言中拥有如下几种运算符类型: 算术运算符 关系运算符 逻辑 ...
- bzoj1031题解
[解题思路] 将原串复制一份拼接到原串后作为处理串,可以对处理串的前一半后缀排序,即可得出顺序.复杂度O(Llog2L). [参考代码] 也是naive的时候写的..后缀数组居然是用桶排求的.. #p ...
- 移动端图片轮播效果:depth模式总结
最近公司app改版首页增加了一处轮播图效果,但是跟普通的轮播效果不同,是类似于下图的样式,找了一些兼容移动端的插件以及jQuery源码,总结一下使用心得: 1:jquery源码:缺点是在手机端的滑动很 ...
- RDBMS关系型数据库与HBase的对比
关系型数据库 结构: * 数据库以表的形式存在 * 支持FAT.NTFS.EXT.文件系统 * 使用Commit log存储日志 * 参考系统是坐标系统 * 使用主键(PK) * 支持分区 * 使用行 ...
- NX二次开发-创建一个3 x 3矩阵UF_CSYS_create_matrix
1 NX9+VS2012 #include <uf.h> #include <uf_csys.h> #include <uf_mtx.h> UF_initializ ...
- linux下mysql权限配置
先登入mysql mysql -u root -p 然后回车键入密码! 1.2 赋予主机B操作数据库的权限 mysql> grant usage on *.* to username@192.1 ...
- luoguP5162 WD与积木
我怎么这么zz啊.... 法一: 枚举最后一层的方案:没了... 法二: 生成函数:没了. k*F^k(x),就是错位相减. 法三: 我的辣鸡做法:生成函数 求方案数,用的等比数列求和....多项式快 ...
- C++源文件的后缀名问题
VC里用cpp作后缀名, 在GCC里默认采用C.cc.cxx作为后缀名 .cpp, .h (VS file).cc, .h (GCC file) C中: 头文件后缀名: .h 源文件后缀名: .c ...
- Linux_磁盘分区、挂载、查看
一.挂载 1.查看设备的挂载情况 lsblk或lsblk -f 2.挂载 需求 :给我们的Linux系统增加一个新的硬盘,并且挂载到/home/newdisk 说明:我们以增加一块硬盘为例来熟悉一下磁 ...
- [转]关于tomcat 中的 tomcat-users.xml 配置不生效原因
安装完tomcat,或者解压完tomcat后,在tomcat的目录下有个conf文件夹,在这个文件夹下面有一个tomcat- users.xml的文件,这个文件里面的配置信息是当我们进入http:// ...