• TCP--文件上传


    客户端

    public class Test2_UpdateClient {
        public static void main(String[] args) throws UnknownHostException, IOException {
            // 1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹
            File file = getFile();
            // 2.发送文件名到服务端
            Socket socket = new Socket("127.0.0.1", 12345);
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintStream ps = new PrintStream(socket.getOutputStream());
            ps.println(file.getName());
            // 6.接收结果, 如果存在给予提示, 程序直接退出
            String result = br.readLine();                      //读取存在后不存在的结果
            if("存在".equals(result)) {
                System.out.println("您上传的文件已经存在,请不要重复上传");
                socket.close();
                return;
            }
            // 7.如果不存在, 定义FileInputStream读取文件, 写出到网络
            FileInputStream fis = new FileInputStream(file);
            byte[] arr = new byte[8192];
            int len;
            while((len = fis.read(arr)) != -1) {
                ps.write(arr, 0, len);
            }
    
            fis.close();
            socket.close();
        }
    
    
    
    
        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;
                }
            }
        }
    }
    

    服务端

        public class Test2_UpdateServer {
    	public static void main(String[] args) throws IOException {
    		//3,建立多线程的服务器
    		ServerSocket server = new ServerSocket(12345);
    		System.out.println("服务器启动,绑定12345端口号");
    		
    		//4.读取文件名
    		while(true) {
    			final Socket socket = server.accept();					//接受请求
    			new Thread() {
    				public void run() {
    					try {
    						InputStream is = socket.getInputStream();
    						BufferedReader br = new BufferedReader(new InputStreamReader(is));
    						PrintStream ps = new PrintStream(socket.getOutputStream());
    						String fileName = br.readLine();
    						
    						//5.判断文件是否存在, 将结果发回客户端
    						File dir = new File("update");
    						dir.mkdir();								//创建文件夹
    						File file = new File(dir,fileName);			//封装成File对象
    						
    						if(file.exists()) {							//如果服务器已经存在这个文件
    							ps.println("存在");						//将存在写给客户端
    							socket.close();							//关闭socket
    							return;
    						}else {
    							ps.println("不存在");
    						}
    						
    						//8.定义FileOutputStream, 从网络读取数据, 存储到本地
    						FileOutputStream fos = new FileOutputStream(file);
    						byte[] arr = new byte[8192];
    						int len;
    						
    						while((len = is.read(arr)) != -1) {
    							fos.write(arr, 0, len);
    						}
    						
    						fos.close();
    						socket.close();
    					} catch (IOException e) {
    						
    						e.printStackTrace();
    					}
    				}
    			}.start();
    		}
    		
    		
    		
    	}
        }
    
    • 此方法可以使用云服务器当做文件传输方式,需要修改上传方式。可使用web快速选择文件上传目录等。通过IP地址+文件地址访问上传文件
      代码部分参考文档。
  • 相关阅读:
    大数据学习——yum练习安装jdk
    大数据学习——shell编程
    wps左侧显示目录
    大数据学习——Linux上常用软件安装
    大数据学习
    大数据学习——课后练习一
    大数据学习——:wq不能退出vi编辑器
    大数据学习——linux常用命令(五)
    安装SecureCRT注册
    大数据学习——linux常用命令(二)四
  • 原文地址:https://www.cnblogs.com/PoetryAndYou/p/11206532.html
Copyright © 2020-2023  润新知