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

所属分类: 软件编程 / java 阅读数: 104
收藏 0 赞 0 分享

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循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,

更多精彩内容其他人还在看

spring boot 静态资源处理方法

本篇文章主要介绍了spring boot 静态资源处理方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解spring boot 使用application.properties 进行外部配置

这篇文章主要介绍了详解spring boot 使用application.properties 进行外部配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Java实现分页的前台页面和后台代码

这篇文章主要为大家详细介绍了Java实现分页的前台页面和后台代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解spring面向切面aop拦截器

spring中有很多概念和名词,比如过滤器、拦截器、aop等。这篇文章主要介绍了详解spring面向切面aop拦截器,有兴趣的可以了解一下。
收藏 0 赞 0 分享

Java easyui树形表格TreeGrid的实现代码

这篇文章主要为大家详细介绍了Java easyui树形表格TreeGrid的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java的NIO与IO的详解及对比

这篇文章主要介绍了Java的NIO与IO的详解及对比的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java中网络IO的实现方式(BIO、NIO、AIO)介绍

这篇文章主要介绍了Java中网络IO的实现方式(BIO、NIO、AIO)介绍的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 敏感信息加密处理

本文主要介绍了Java 敏感信息加密处理的相关知识:1)敏感信息加密处理我们要实现什么;2)敏感信息加密处理我做了些什么;3)敏感信息加密实现方法。具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详解使用Spring3 实现用户登录以及权限认证

这篇文章主要介绍了详解使用Spring3 实现用户登录以及权限认证,这里整理了详细的代码,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

Java的内存机制详解

本文主要介绍了Java的内存机制的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享
查看更多