JavaIO流实现文件传输
线程类
服务器端要用到线程,每次有文件上传都要用到这个类,所以最好将这个类抽离出来专门处理文件上传业务的线程类。
相关代码如下:
//处理文件上传业务的线程类
public class ServerThread implements Runnable{private Socket socket;public ServerThread(Socket socket) {this.socket = socket;}//负责获取客户端传递文件的数据,同时将数据写入到本地的某个文件中@Overridepublic void run() {//获取客户端对应的ip地址String ip=socket.getInetAddress().getHostAddress();//创建一个用于计数文件上传次数的变量int count=1;try {//获取输入流对象InputStream in=socket.getInputStream();//文件对象File parentFile=new File("E:/upload/");//如果文件夹目录不存在自动创建此文件夹if(!parentFile.exists()){parentFile.mkdir();//创建此文件夹}//创建一个具体的File对象,将来存储客户端传递的数据,写入到此File中//在父目录的文件夹下会生成以ip开头的文件File file=new File(parentFile,ip+"("+count+").jpg");if(file.exists()){//如果该文件已存在,则让count先自增后加创建file=new File(parentFile,ip+"("+ ++count +").jpg");}//获取输入流中的数据,然后将数据写入到File对象中FileOutputStream fos = new FileOutputStream(file);//客户端传递过来的数据也要进行读写操作byte[] buf=new byte[1024];//定义一个读取的长度int len=0;while((len=in.read(buf))!=-1){fos.write(buf,0,len);}//如果文件上传完成,则提示客户 文件上传成功!OutputStream out = socket.getOutputStream();out.write("上传成功".getBytes());//关流fos.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}
文件操作的服务端
每发现有客户端来连接,直接启动一个线程来和服务端通信
//文件上传操作的服务端
public class FileServer {public static void main(String[] args) throws IOException {//创建ServerSocket对象ServerSocket serverSocket=new ServerSocket(10001);//accept()对象while(true){//此时这个socket包含了客户端所有的信息Socket socket= serverSocket.accept();//创建对应的线程,独立处理与客户端的通信ServerThread serverThread=new ServerThread(socket);//启动当前的线程来处理和客户端对应的通信new Thread(serverThread).start();}}
}
客户端
//文件上传操作的客户端类
public class FileClient {public static void main(String[] args) throws IOException {System.out.print("请输入上传问件对应的路径");Scanner input=new Scanner(System.in);// 加入客户端输入 D:/work/1.jpgString upload=input.nextLine();//Socket要连接的服务器ip地址和端口号Socket socket=new Socket("localhost",10001);//获取Socket的输出流对象OutputStream out = socket.getOutputStream();//判断upload是否真实存在if(!upload.isEmpty()){//文件不为空FileInputStream fis=new FileInputStream(upload);//定义一个字节数组byte[] buf=new byte[1024];int len=0;while((len=fis.read(buf))!=-1){//将buf中的数据转移到out中out.write(buf,0,len);}//注意:当客户端输出数据完毕后,一定要进行关闭/*shutdown方法关流只是对当前socket持有的output流关掉,不会影响后续socket调其他流close会关掉所有与该对象相关的流*/socket.shutdownOutput();//处理服务端响应回来的数据(上传成功!)InputStream in = socket.getInputStream();byte[] msg=new byte[1024];//调用read()int num=in.read(msg);//字节数组转化成字符串进行输出String str=new String(msg,0,num);System.out.println(str);fis.close();socket.close();}}
}
这样我们就可以完成一个文件的传输啦!
JavaIO流实现文件传输相关推荐
- Java------IO流之文件专属流
文件专属流 文章目录 文件专属流 FileInputStream流 FileInputStream初步读取 FileInputStream循环读 IDEA默认当前路径 往byte数组中读 最终版Fil ...
- java-IO流-在文件中数据内容的插入问题
1问题 在某个文件的中间某个位置插入字符串,例如: 文件内容:abcd 插入内容:123 插入下标:2 预期结果:ab123cd 2基本思路 1.校验参数的合法性 2.将指针移动到插入的位置 3.通过 ...
- java-IO流-将文件夹以树形结构打印(打印文件夹目录)问题
问题 将一个文件夹下的文件(包括目录)以树形结构打印出来,等级目录要有标识 基本思路 1.参数合法性校验 2.如果是文件 当前属于第几层打印层级表示和文件名 3.如果是目录的 进入目录 当前是第 ...
- JavaIO流之文件路径
斜杠和反斜杠 正斜杠,又称左斜杠,符号是"/": 反斜杠,也称右斜杠,符号是"\". 在Unix/Linux中,路径的分隔采用正斜"/",比 ...
- javaIO流之转换流
目录 简介 一.编码和解码 二.字符集 2.1ASCII 字符集 2.2Unicode 字符集 2.3GBK 字符集 三.乱码 四.InputStreamReader 4.1构造方法 4.2解决编码问 ...
- php接收流文件,PHP传输文件流及文件流的保存
什么是文件流 在HTTP数据传送过程中,传输一方直接以二进制流方式传送文件内容,这样就形成了一个文件流: 文件流的接收通常涉及到预定义变量函数 $HTTP_RAW_POST_DATA 和 file_g ...
- 文件传输基础——Java IO流
一.文件的编码 1 package com.study.io; 2 3 4 /** 5 * 测试文件编码 6 */ 7 public class EncodeDemo { 8 9 /** 10 * @ ...
- java io flush_《文件传输基础——Java IO流》,对其中flush方法的思考
在学习了<文件传输基础--Java IO流> 课程后,发现自己对flush()方法的调用有很多疑惑.在查询资料和自己看源码以及动手试验之后发现有以下几个特点.如有误也请大家指正出来,一切为 ...
- Java从入门到精通十一(javaIO流)
Java从入门到精通十一(javaIO流) IO引入 字节流和字符流(一些说明) 字节流没有用到缓冲区并不是没有用到内存 为什么输入流是读数据,而输出流是写数据? 字节流说明 字节输入流读数据的方法 ...
- 【JavaIO流】JavaIO中的常用处理流
JavaIO中的常用处理流 在前面,我们了解了有关JavaIO流基础的使用,其中对于IO流来说最基础的四大基类就是InputStream.OutputStream.Reader.Writer.而我们对 ...
最新文章
- VC嵌入断点中断INT3
- 视频智能去水印:从数学建模到工程实现
- 前端学习(3289):react hook state-hook
- java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String
- 计算机辅助设计cad综述,控制系统计算机辅助设计综述
- 从源码分析非线程安全集合类的不安全迭代器
- SQL Server2008 错误源:.net SqlClient data provider的解决方法
- 如何使用电力电子仿真软件Plecs写程序脚本?(欢迎交流学习)
- pythonudp通信程序_python中UDP编程实现通信
- 达摩院发布:2022年十大科技趋势
- 【控制理论】矩阵求逆引理推导及理解
- 康佳电视手机遥控器android版,康佳电视遥控器
- pythonexcel源码_Python对Excel操作详解_Python教程
- 百度没有文化(转载)
- OpenStack实践(十一):Instance Live Migrate and Evacuate
- 双胺基修饰MOF/GO烯复合材料|硫修饰Cu基MOF材料|磁性纳米多孔碳材料FeO@C|mof材料的复杂定制
- webrtc 支持h264 思路
- 使用POI创建Excel无法打开
- vue项目中gojs最新V2.2.5版本去除水印
- Design and Implementation of a Highly Efficient DGEMM for 64-bit ARMv8 Multi-Core Processors