Java实现一个简单的文件上传案例示例代码

 更新时间:2020年07月22日 09:28:56   作者:一只胡说八道的猴子  
这篇文章主要介绍了Java实现一个简单的文件上传案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Java实现一个简单的文件上传案例

实现流程:
1.客户端从硬盘读取文件数据到程序中
2.客户端输出流,写出文件到服务端
3.服务端输出流,读取文件数据到服务端中
4.输出流,写出文件数据到服务器硬盘中

下面上代码

上传单个文件

服务器端

package FileUpload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
 public static void main(String[] args) throws IOException {
  System.out.println("服务器端启动");
  //创建一个服务器端对象
  ServerSocket serverSocket = new ServerSocket(8888);
  //使用accept获取socket对象
  Socket accept = serverSocket.accept();
  //使用字节输入流读取
  InputStream inputStream = accept.getInputStream();
  //创建一个字节输出流输出到本地
  FileOutputStream fileOutputStream = new FileOutputStream("F:\\this\\copy1.jpg",true);
  //创建一个数组循环读取
  byte[] bytes = new byte[1024];
  int len;
  while ((len=inputStream.read(bytes))!=-1){
   fileOutputStream.write(bytes,0,len);
  }
  System.out.println("执行完毕");
  fileOutputStream.close();
  inputStream.close();

 }
}

客户端

package FileUpload;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
 public static void main(String[] args) throws IOException {
  //创建一个Socket对象
  Socket socket = new Socket("127.0.0.1", 8888);
  //读取本地文件
  FileInputStream fileInputStream = new FileInputStream("F:\\1.jpeg");
  //获取输出流向服务器写入数据
  OutputStream outputStream = socket.getOutputStream();
  //创建数组读取
  byte[] bytes = new byte[1024];
  int len;
  //边都边写
  while((len=fileInputStream.read(bytes))!=-1){
   outputStream.write(bytes,0,len);
   outputStream.flush();
  }
  //由于不会写入-1所以调用socket的shutdownOutput方法把前面的数据都写入并且正常终止后面的序列
  socket.shutdownOutput();
  System.out.println("文件发送完毕");
  fileInputStream.close();
  outputStream.close();
  socket.close();
 }
}

循环上传

客户端代码

package FileUpload;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
 public static void main(String[] args) throws IOException {
  //创建一个Socket对象
  Socket socket = new Socket("127.0.0.1", 8888);
  //读取本地文件
  FileInputStream fileInputStream = new FileInputStream("F:\\1.jpeg");
  //获取输出流向服务器写入数据
  OutputStream outputStream = socket.getOutputStream();
  //创建数组读取
  byte[] bytes = new byte[1024];
  int len;
  //边都边写
  while((len=fileInputStream.read(bytes))!=-1){
   outputStream.write(bytes,0,len);
   outputStream.flush();
  }
  //由于不会写入-1所以调用socket的shutdownOutput方法把前面的数据都写入并且正常终止后面的序列
  socket.shutdownOutput();
  System.out.println("文件发送完毕");
  fileInputStream.close();
  outputStream.close();
  socket.close();
 }
}

服务器端代码

package FileUpload;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.net.ServerSocket;
  import java.net.Socket;
public class Server {
 public static void main(String[] args) throws IOException {
  System.out.println("服务器端启动");
  //创建一个服务器端对象
  ServerSocket serverSocket = new ServerSocket(8888);
  //使用while()持续写入数据
  while(true){
   //使用accept获取socket对象
   Socket accept = serverSocket.accept();
   //Socket对象交给子线程处理,进行读写操作,
   new Thread(() ->{
    {
     //使用字节输入流读取
     InputStream inputStream = null;
     try {
      //文件名
      String name = new String("F:\\this\\"+ System.currentTimeMillis()+"copy1.jpg" );
      inputStream = accept.getInputStream();
      //创建一个字节输出流输出到本地
      FileOutputStream fileOutputStream = new FileOutputStream(name,true);
      //创建一个数组循环读取
      byte[] bytes = new byte[1024];
      int len;
      while ((len=inputStream.read(bytes))!=-1){
       fileOutputStream.write(bytes,0,len);
      }
      System.out.println("执行完毕");
      fileOutputStream.close();
      inputStream.close();
     } catch (IOException e) {
      e.printStackTrace();
     }
    }
   }).start();
  }

 }
}

循环输入无非就是增加了一个while循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,

到此这篇关于Java实现一个简单的文件上传案例示例代码的文章就介绍到这了,更多相关Java实现文件上传案例内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java abstract class interface之间的区别介绍

    java abstract class interface之间的区别介绍

    含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象,abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法
    2012-11-11
  • springboot 获取工具类bean过程详解

    springboot 获取工具类bean过程详解

    这篇文章主要介绍了springboot 获取工具类bean过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 开源的Java图片处理库实例详解

    开源的Java图片处理库实例详解

    Java 图片处理库提供了丰富的功能,用于处理和增强图像,在Java生态系统中,有几个流行的开源库可以用于图片处理,这些库提供了丰富的功能,如图像缩放、裁剪、颜色调整、格式转换等,本文介绍开源的Java图片处理库介绍,感兴趣的朋友一起看看吧
    2024-03-03
  • MyBatis配置文件元素示例详解

    MyBatis配置文件元素示例详解

    在MyBatis框架的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在<contiguration>元素内配置,这篇文章主要介绍了MyBatis配置文件元素,需要的朋友可以参考下
    2023-06-06
  • 关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    这篇文章主要介绍了关于mybatis遇到Integer类型的参数时动态sql需要注意条件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java拆装箱深度剖析

    Java拆装箱深度剖析

    这篇文章主要为大家深度剖析了Java拆箱装箱的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 使用jmx exporter采集kafka指标示例详解

    使用jmx exporter采集kafka指标示例详解

    这篇文章主要为大家介绍了使用jmx exporter采集kafka指标示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 使用 mybatis 自定义日期类型转换器的示例代码

    使用 mybatis 自定义日期类型转换器的示例代码

    这篇文章主要介绍了使用 mybatis 自定义日期类型转换器的示例代码,这里使用mybatis中的typeHandlers 实现的,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • SpringMVC运行时出现404错误的解决办法汇总(基本包含所有错误可能)

    SpringMVC运行时出现404错误的解决办法汇总(基本包含所有错误可能)

    初学SpringMVC基本都会碰到404问题(确实也困扰了我好长时间),但出现404问题的原因有很多,如果确认路径,代码没问题,并且服务器可以正常启动,依然出现404问题的话,就根据本篇步骤逐一排查,需要的朋友可以参考下
    2024-04-04
  • Springboot Activemq整合过程代码图解

    Springboot Activemq整合过程代码图解

    这篇文章主要介绍了Springboot Activemq整合过程代码图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论