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