JAVA C/S文件传输
1.客户机
package com.zhao.updata; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Updata_Client { public Updata_Client() { } /** * 1.提示要上传的路径,验证文件夹是否存在或者是否是路径 2.发送文件名到服务端 3.接受结果,如果存在给予提示,程序直接退出 * 4.如果不存在,定义FileInputStream 读取文件,写出到网络 * * @param args * @throws IOException * @throws UnknownHostException */ public static void main(String[] args) throws IOException { // * 1.提示要上传的路径,验证文件夹是否存在或者是否是路径 File filename = getFile(); // * 2.发送文件名到服务端 Socket socket = new Socket("127.0.0.1", 65534); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintStream ps = new PrintStream(socket.getOutputStream()); ps.println(filename.getName()); // * 3.接受结果,如果存在给予提示,程序直接退出 String result = br.readLine(); boolean flag = isfile_server(socket, br, ps, result, filename); // * 4.如果不存在,定义FileInputStream 读取文件,写出到网络 if (flag) { FileInputStream fis = new FileInputStream(filename); byte[] arr = new byte[8192]; int len; // double progress=0; //进度 // int sump=fis.available(); //返回字节文件输入流中可读取的字节数 while ((len = fis.read(arr)) != -1) { ps.write(arr, 0, len); // progress=len/sump; //进度 // System.out.println("当前进度:"+progress+"%"); } System.out.println("传输完成"); fis.close(); socket.close(); } } private static boolean isfile_server(Socket socket, BufferedReader br, PrintStream ps, String result, File filename) throws IOException { if ("ok".equals(result)) { System.out.println("您上传的文件服务器端已经存在,请不要重复上传!"); System.out.println("\n\n请您重新输入!");// System.out.println("\n\n请您重新输入或输入Q退出!"); // if("Q".equals(br.readLine())){ // socket.close(); // System.exit(0); //退出程序 // } socket.close(); } else if ("no".equals(result)) { return true; // 可以上传 } return false; } private static File getFile() { Scanner sc = new Scanner(System.in); System.out.println("请输入要上传的文件路径:"); while (true) { String line = sc.nextLine(); File file = new File(line); if (!file.exists()) { System.out.println("您输入的文件路径不存在!"); } else if (file.isDirectory()) { System.out.println("您输入的是文件夹路径,请输入文件路径!"); } else { return file; } } } }
2.服务器
package com.zhao.updata; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class Updata_Server { public Updata_Server() { // TODO 自动生成的构造函数存根 } /** * 1.建立多线程的服务器 * 2.读取文件名 * 3.判断文件是否存在,将结果发送到客户端 * 4.定义FileOutputStream ,从网络读取数据,存储到本地 * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // * 1.启动服务器 ServerSocket server=new ServerSocket(65534); System.out.println("服务器启动,绑定65534端口"); // * 2.建立多线程的服务器,读取文件名 while(true){ final Socket socket=server.accept(); new Thread(){ public void run() { try { InputStream inputStream = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); PrintStream ps = new PrintStream(socket.getOutputStream()); String flenames = br.readLine(); // 获取客户端发过来的文件名 // * 3.判断文件是否存在,将结果发送到客户端 File dir = new File("updata"); if (!dir.isDirectory()) { dir.mkdir(); // 在服务器端创建updata文件夹 } File file = new File(dir, flenames); if (file.exists()) { System.out.println("ok"); // 服务器端已经存在该文件了 ps.println("ok"); socket.close(); return; } else { ps.println("no"); System.out.println("no"); } // 4.定义FileOutputStream ,从网络读取数据,存储到本地 FileOutputStream fos = new FileOutputStream(file); byte[] arr = new byte[8192]; // 创建字节数组 int len; while ((len = inputStream.read(arr)) != -1) { fos.write(arr, 0, len); } fos.close(); socket.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }; }.start(); } } }
3.运行


浙公网安备 33010602011771号