• 基于IO流的模拟下载文件的操作


    一、创建服务器端

    public class DownloadServer {
        public static void main(String[] args) throws Exception{
            ServerSocket server=new ServerSocket(55021);
            while(true){
                Socket socket=server.accept();
                System.out.println("连接建立成功!");
                //创建接受客户端发送来的字符输入流对象
                BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //创建字符输出流对象
                PrintWriter pw=new PrintWriter(socket.getOutputStream());
                StringBuilder sbu=new StringBuilder();
                String s=br.readLine();
                if(s.equals("image")){
                    //创建文件对象
                    File file=new File("service");
                    File[] files = file.listFiles();
                    for(File f:files){
                        System.out.print(f.getName()+"	");
                        sbu.append(f.getName()+",");
                    }
                    pw.println(sbu);
                    pw.flush();
                    br.close();
                    pw.close();
                }else{
                    File file=new File("service/"+s);
                    //创建二进制输入流对象,读取目录下的文件
                    DataInputStream dis=new DataInputStream(new FileInputStream(file));
                    //创建二进制输出流对象,向客户端发送数据
                    DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
                    byte[] bytes=new byte[1024];
                    int data;
                    //读取目录下的文件并向客户端输出二进制流
                    while((data=dis.read(bytes))!=-1){
                        dos.write(bytes, 0,data);
                    }
                    dos.close();
                    dis.close();
                    br.close();
                    socket.close();
                }
            }
    
        }
    }

    二、创建客户端

    public class DownloadClient {
       static Socket socket;
        public static void main(String[] args) throws Exception{
            Scanner input=new Scanner(System.in);
            System.out.println("1.图片	2.视频	3.音乐");
            System.out.print("请选择序号:");
            int num=input.nextInt();
            switch(num){
                case 1:
                    String[] str=getName();
                    for(int i=1;i<=str.length;i++){
                        System.out.print(i+","+str[i-1]+"	");
                    }
                    System.out.print("
    请选择你要下载的图片序号:");
                    int num2=input.nextInt();
                    download(str[num2-1]);
                    break;
                case 2:
                    break;
                case 3:
                    break;
            }
        }
        public static String[] getName() throws Exception{
            //创建socket对象
            socket=new Socket("127.0.0.1",55021);
            PrintWriter pw=new PrintWriter(socket.getOutputStream());
            pw.println("image");
            pw.flush();
            //获取服务端传过来的数据
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String s=br.readLine();
            br.close();
            pw.close();
            socket.close();
            return s.split(",");
        }
        public static void download(String name) throws Exception {
            socket=new Socket("127.0.0.1",55021);
            PrintWriter pw=null;
            DataInputStream dis=null;
            DataOutputStream dos = null;
            try {
                //创建输出流,并发送要下载的图片名称
                pw = new PrintWriter(socket.getOutputStream());
                pw.println(name);
                pw.flush();
                //接受客户端发送来的二进制流
                dis=new DataInputStream(socket.getInputStream());
                //要写入的文件路径和写入方式
                dos=new DataOutputStream(new FileOutputStream("download/"+name,true));
                byte[] bytes=new byte[1024];
                int data;
                //读取二进制流并复制
                while((data=dis.read(bytes))!=-1){
                    dos.write(bytes,0,data);
                }
    
            }catch(Exception e){
                e.printStackTrace();
            }finally {
                try {
                    dos.close();
                    dis.close();
                    pw.close();
                    socket.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    Hbase shell基本操作
    Spring Caching集成Ehcache
    统一认证授权及单点登录的技术选择
    详谈再论JAVA获取本机IP地址
    Spark基础脚本入门实践3:Pair RDD开发
    Spark基础脚本入门实践2:基础开发
    Spark基础脚本入门实践1
    必须熟练的基础linux命令
    Swing中的线程并发处理
    源码分享!!!world文档转换为JPG图片
  • 原文地址:https://www.cnblogs.com/TFE-HardView/p/11098424.html
Copyright © 2020-2023  润新知