当前位置:主页 > 软件编程 > JAVA代码 >

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

时间:2020-12-12 09:49:46 | 栏目: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循环与一点多线程的知识,以上就是一个文件上传的一个简单案例,

您可能感兴趣的文章:

相关文章