Java实现FTP文件下载功能简单IO流逻辑

区别 字符流 与 字节流 各自的功能和过滤流的使用场景。

Server 端IO处理逻辑

try {
    // 字符流:创建 Clinet/Server 交互输入输出字符流(收发字符串)
    BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), "UTF-8"));

    // 从 Client 阻塞接收文件名
    String filename = br.readLine();

    // 字节流:创建文件的输入流(读)、客户端输出流(发送)
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filename));
    BufferedOutputStream bos = new BufferedOutputStream(client.getOutputStream());

    // 判断目录下是否存在该文件
    if (checkFileExists(filename)) {
        System.out.println("文件存在,开始提供下载...");
        // 传输文件所有字节数据
        int data = 0;
        while ((data = bis.read()) >= 0) {
            bos.write(data);
        }
        bos.flush();
    } else {
        pw.println("文件不存在,请重新输入!");
        pw.flush();
    }

    bos.close();
    bis.close();
    pw.close();
    br.close();
} catch (Exception e) {
    e.printStackTrace();
}


    private boolean checkFileExists(String fn) {
        File[] files = new File(".").listFiles();
        for (File f : files) {
            if (f.getName().equals(fn)) {
                return true;
            }
        }
        return false;
    }

Client 端IO处理逻辑

try {
    // 字符流:创建 Clinet/Server 交互输入输出流(收发字符串)
    BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(), "UTF-8"));
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(), "UTF-8"));

    // 发送文件名到服务器
    pw.println(filename);
    pw.flush();
    
    System.out.println("开始下载:" + filename);
    // 字节过滤流:创建文件输出流(写)、服务端输入流(接收)
    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("fromServer_" + filename));
    BufferedInputStream bis = new BufferedInputStream(client.getInputStream());
    
    // 读出文件所有字节数据,写入新命名的文件
    int data = 0;
    while ((data = bis.read()) >= 0) {
        bos.write(data);
    }
    System.out.println("下载完成...");
    
    bis.close();
    bos.close();
    br.close();
    pw.close();
} catch (Exception e) {
    e.printStackTrace();
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. Java基础部分.................................................
    wy_sure阅读 3,846评论 0 11
  • tags:io categories:总结 date: 2017-03-28 22:49:50 不仅仅在JAVA领...
    行径行阅读 2,229评论 0 3
  • 1.java IO流的概念,分类,类图 1.1. java IO 流的概念 java的io是实现输入和输出的基础,...
    onlyHalfSoul阅读 583评论 0 1
  • 1.Java Io流的概念,分类,类图。 1.1 Java Io流的概念     java的io是实现输入和输出...
    hedgehog1112阅读 698评论 0 0
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,272评论 0 2