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

所属分类: 软件编程 / java 阅读数: 90
收藏 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循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,

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

Java基于反射机制实现全部注解获取的方法示例

这篇文章主要介绍了Java基于反射机制实现全部注解获取的方法,结合实例形式分析了java反射机制获取注解的具体实现方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 信号量Semaphore的实现

这篇文章主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

eclipse+maven+spring mvc项目基本搭建过程

这篇文章主要介绍了eclipse+maven+spring mvc项目基本搭建过程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring boot集成swagger2生成接口文档的全过程

这篇文章主要给大家介绍了关于Spring boot集成swagger2生成接口文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java冒泡排序法和选择排序法的实现

这篇文章主要介绍了Java冒泡排序法和选择排序法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Cloud Alibaba教程之Sentinel的使用

这篇文章主要介绍了Spring Cloud Alibaba教程之Sentinel的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Josephus环的四种解法(约瑟夫环)基于java详解

这篇文章主要介绍了Josephus环的四种解法(约瑟夫环)基于java详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java继承Thread类创建线程类示例

这篇文章主要介绍了Java继承Thread类创建线程类,结合实例形式分析了java线程操作相关使用技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用Callable和Future创建线程操作示例

这篇文章主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

springBoot使用JdbcTemplate代码实例

这篇文章主要介绍了springBoot使用JdbcTemplate代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多