java 学习笔记之 IO流笔记

IO流的图解如下:

IO流图解副本.jpg

测试对比

/*
 * 数据源
 *      神话.mp4
 * 目的地
 *      sh.mp4
 * 
 * 基本字节流一次读取一个字节:共耗时61298毫秒
 * 基本字节流一次读取一个字节数组:共耗时83毫秒
 * 高效字节流一次读取一个字节数组:共耗时651毫秒
 * 高效字节流一次读取一个字节数组:共耗时32毫秒
 */
public static void main(String[] args) throws IOException {
    long start = System.currentTimeMillis();
    
    //1.基本字节流一次读取一个字节
    // method1("神话.mp4", "sh.mp4");
    
    //2.基本字节流一次读取一个字节数组
    // method2("神话.mp4", "sh.mp4");
    
    //3.高效字节流一次读取一个字节
    // method3("神话.mp4", "sh.mp4");
    
    //4.高效字节流一次读取一个字节数组
    method4("神话.mp4", "sh.mp4");
    long end = System.currentTimeMillis();
    System.out.println("共耗时" + (end - start) + "毫秒");
}

//4.高效字节流一次读取一个字节数组
private static void method4(String srcString, String destString)
        throws IOException {
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
            srcString));
    BufferedOutputStream bos = new BufferedOutputStream(
            new FileOutputStream(destString));

    byte[] bys = new byte[1024];
    int len = 0;
    while ((len = bis.read(bys)) != -1) {
        bos.write(bys, 0, len);
    }

    bos.close();
    bis.close();
}

//3.高效字节流一次读取一个字节
private static void method3(String srcString, String destString)
        throws IOException {
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
            srcString));
    BufferedOutputStream bos = new BufferedOutputStream(
            new FileOutputStream(destString));

    int by = 0;
    while ((by = bis.read()) != -1) {
        bos.write(by);
    }

    bos.close();
    bis.close();
}

//2.基本字节流一次读取一个字节数组
private static void method2(String srcString, String destString)
        throws IOException {
    FileInputStream fis = new FileInputStream(srcString);
    FileOutputStream fos = new FileOutputStream(destString);

    byte[] bys = new byte[1024];
    int len = 0;
    while ((len = fis.read(bys)) != -1) {
        fos.write(bys, 0, len);
    }

    fos.close();
    fis.close();
}

//1.基本字节流一次读取一个字节
private static void method1(String srcString, String destString)
        throws IOException {
    FileInputStream fis = new FileInputStream(srcString);
    FileOutputStream fos = new FileOutputStream(destString);

    int by = 0;
    while ((by = fis.read()) != -1) {
        fos.write(by);
    }

    fos.close();
    fis.close();
}

实践:

1.数据复制

(A.)数据源是文件 目的是文件

/**
 * 数据源   目的地 
 * 
 * a.txt   b.txt
 */
public static void main(String[] args) throws IOException {
        
    BufferedReader bufferedReader = new BufferedReader(new FileReader("a.txt"));
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("b.txt"));
    String string = null;
    while ((string = bufferedReader.readLine())!=null) {
        bufferedWriter.write(string);
        bufferedWriter.newLine();
        bufferedWriter.flush();
    }
    bufferedReader.close();
    bufferedWriter.close();
}

(B.)数据源是文件 目的地是控制台

/**
 * 数据源   目的地 
 * 
 * a.txt   控制台
 */
public static void main(String[] args) throws IOException {
    
    BufferedReader bufferedReader = new BufferedReader(new FileReader("a.txt"));
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    String string = null;
    while ((string = bufferedReader.readLine())!=null) {
        bufferedWriter.write(string);
        bufferedWriter.newLine();
        bufferedWriter.flush();
    }
    bufferedReader.close();
    bufferedWriter.close();
}

(C.)数据源是键盘录入 目的地是文本文件

/**
 * 数据源   目的地 
 * 
 * 键盘录入 a.txt
 */
public static void main(String[] args) throws IOException {
    
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("a.txt"));
    
    String string = null;
    while ((string = bufferedReader.readLine())!=null) {
        if ("over".equals(string)) {
            break;
        }
        bufferedWriter.write(string);
        bufferedWriter.newLine();
        bufferedWriter.flush();
    }
    bufferedReader.close();
    bufferedWriter.close();
}

(D.)数据源键盘录入 目的地控制台

/**
 * 数据源   目的地 
 * 
 * 键盘录入  控制台
 */
public static void main(String[] args) throws IOException {
    
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    String string = null;
    while ((string = bufferedReader.readLine())!=null) {
        if ("over".equals(string)) {    
            break;
        }   
        bufferedWriter.write(string);
        bufferedWriter.newLine();
        //bufferedWriter.flush();
    }
    bufferedReader.close();
    bufferedWriter.close();
}

(E.)键盘录入数据写到文本文件a.txt,然后把a.txt的数据写到b.txt,最后把b.txt的数据显示到控制台(录入---->文件--->文件---->控制台)

public static void main(String[] args) throws IOException {
    
    //第一步: 键盘录入数据写到文本文件a.txt   数据源--->键盘录入  目的地--->a.txt
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter aBufferedWriter = new BufferedWriter(new FileWriter("a.txt"));
    fileWR(bufferedReader, aBufferedWriter);
    
    //第二步: a.txt的数据写到b.txt   数据源--->a.txt  目的地--->b.txt
    BufferedReader aBufferedReader = new BufferedReader(new FileReader("a.txt"));
    BufferedWriter bBufferedWriter = new BufferedWriter(new FileWriter("b.txt"));
    fileWR(aBufferedReader, bBufferedWriter);

    //第三步:b.txt的数据显示到控制台
    BufferedReader bBufferedReader = new BufferedReader(new FileReader("b.txt"));
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    fileWR(bBufferedReader,bufferedWriter);
}
public static void fileWR(BufferedReader reader , BufferedWriter writer) throws IOException {
    String string = null;
    while ((string = reader.readLine())!=null) {
        
        if ("over".equals(string)) {    
            break;
        }
        writer.write(string);
        writer.newLine();
        //writer.flush();
    }
    writer.close();
    reader.close();
}

(F.)数据源 ArrayList 目的地a.txt (集合到文件)

public static void main(String[] args) throws IOException  {

    ArrayList<String> list = new ArrayList<String>();
    list.add("hello");
    list.add("word");
    list.add("java");

    BufferedWriter writer = new BufferedWriter(new FileWriter("a.txt"));

    for(String string : list){
        writer.write(string);
        writer.newLine();
        writer.flush();         
    }
    writer.close();
}

(G.)数据源 a.txt 目的地ArrayList (文件到集合)

public static void main(String[] args) throws IOException  {

    BufferedReader reader = new BufferedReader(new FileReader("a.txt"));
    
    ArrayList<String> list = new ArrayList<String>();
    String string = null;
    while ((string = reader.readLine())!=null) {
        list.add(string);
    }
    for(String string2 : list){
        System.out.println(string2);
    }
    reader.close();
}

(F.)复制单击文件夹

    public static void main(String[] args) throws IOException {
      File srcFile = new File("/Users/xz/Desktop/java_api");
    if (!srcFile.exists()) {
        System.out.println("找不到源文件");
        srcFile.exists();
    }
    File[] fileArr =  srcFile.listFiles();
    
    File desFile = new File("/Users/xz/Desktop/java_api_fuben");
    if (!desFile.exists()) {
        desFile.mkdirs();
    }
    
    for(File fi:fileArr){
    
        System.out.println(fi.getName());
        File dessFile = new File(desFile, fi.getName());
        Copy(fi, dessFile);
    }
}

public static void Copy(File file , File desFile) throws IOException {

    BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));
    
    BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(desFile));
    
    byte[] by  = new byte[1024];
    int i = 0;
    while ((i = inputStream.read(by))!= -1) {

        outputStream.write(i);
    }
    
    inputStream.close();
    outputStream.close();
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述: 1、IO流:即Input Output的缩写。 2、特点:1)IO流用来处理设备间的数据传输。2)Java...
    玉圣阅读 1,265评论 0 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 《ilua》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 1...
    叶染柒丶阅读 10,913评论 0 11
  • 1、IO流(序列流)(了解) 1.什么是序列流序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从...
    Y小圆脸阅读 360评论 0 1
  • 这是我在这里的第一篇文章,不知道该写些什么。我是一个理科生从小语文也也都是那种半吊子的水平,写作文只会三段式:开...
    barryLiu阅读 123评论 0 0