java常用IO流简介(二)

IO流分类

分类 字节输入流 字节输出流 字符输入流 字符输出流
抽象基类 InputStream OutputStream Reader Writer
访问文件 FileInputStream FileOutputStream FileReader FileWriter
访问字符串 StringReader StringWriter
缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
转换流 InputStreamReader OutputStreamWriter

一个简单的输出流的demo

/**
步骤:
A:创建输出流对象
B:调用输出流对象的写数据方法,并刷新缓冲区
C:释放资源
*/
public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        //A:创建输出流对象
        FileWriter fw = new FileWriter("d:\\a.txt");

        // B:调用输出流对象的写数据方法,并刷新缓冲区
        //写一个字符串数据
        fw.write("IO流你好");

        //数据没有直接写到文件,其实是写到了内存缓冲区
        fw.flush();

        //C:释放资源: 通知系统释放和该文件相关的资源
        fw.close();

    }
}

注意

 *  flush():刷新缓冲区。流对象还可以继续使用。
 *  close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

一个简单的输入流的demo

* 输入流读数据的步骤:

A:创建输入流对象
B:调用输入流对象的读数据方法
C:释放资源
public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        //A:创建输入流对象
        FileReader fr = new FileReader("FileWriterDemo.java");

        //B:调用输入流对象的读数据方法
        //int read():一次读取一个字符

        /*
        //第一次读数据
        int ch = fr.read();
        System.out.println(ch);
        System.out.println((char)ch);

        //第二次读数据
        ch = fr.read();
        System.out.println(ch);
        System.out.println((char)ch);

        //第三次读数据
        ch = fr.read();
        System.out.println(ch);
        System.out.println((char)ch);

        //这个时候,我们发现代码的重复度很高,想用循环改进,但是不知道循环的结束条件是什么
        ch = fr.read();
        System.out.println(ch);

        ch = fr.read();
        System.out.println(ch);
        //通过测试,我们知道,如果读取数据的返回值是-1的时候,就说明没有数据了,这也是我们循环的结束条件
        */

        //故代码最终改造为循环格式:
        int ch;
        //1:fr.read()
        //2:ch=fr.read()
        //3:ch != -1
        while((ch=fr.read())!=-1) {
            //System.out.println(ch);
            //System.out.println((char)ch);
            System.out.print((char)ch);
        }

        //C:释放资源
        fr.close();
    }
}

使用缓冲流复制字符文件的demo(1)

/* 
* 需求:把项目路径下的FileWriterDemo.java中的内容复制到项目路径下的Copy.java中
* 数据源:FileWriterDemo.java -读数据 -FileReader
* 目的地:Copy.java -写数据 -FileWriter
*/

public class CopyFileDemo2 {
    public static void main(String[] args) throws IOException {
        //创建输入流对象
        FileReader fr  = new FileReader("FileWriterDemo.java");
        //创建输出流对象
        FileWriter fw = new FileWriter("Copy.java");

        //读写数据
        char[] chs = new char[1024];
        int len;
        while((len=fr.read(chs))!=-1) {
            fw.write(chs, 0, len);
        }

        //释放资源
        fw.close();
        fr.close();
    }
}

使用缓冲流复制字符文件的demo(2)

/* 
* 需求:把项目路径下的FileWriterDemo.java中的内容复制到项目路径下的Copy.java中
* 数据源:FileWriterDemo.java -- 读数据 -- FileReader -- 高效的读数据 -- BufferedReader
* 目的地:Copy.java -- 写数据 -- FileWriter -- 高效的写数据 -- BufferedWriter
*/

public class CopyFileDemo {
    public static void main(String[] args) throws IOException {
        //创建输入缓冲流对象
        BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java"));
        //创建输出缓冲流对象
        BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));

        //读写数据
        String line;
        while((line=br.readLine())!=null) {
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

        //释放资源
        bw.close();
        br.close();
    }
}

使用缓冲流读数据到集合

/*
 * 从文本文件中读取数据到ArrayList集合中,并遍历集合
 * 每一行数据作为一个字符串元素
 * 
 * 分析:
 *      A:创建输入缓冲流对象
 *      B:创建集合对象
 *      C:读取数据,每次读取一行数据,把该行数据作为一个元素存储到集合中
 *      D:释放资源
 *      E:遍历集合
 */

public class FileToArrayListTest {
    public static void main(String[] args) throws IOException {
        //创建输入缓冲流对象
        BufferedReader br = new  BufferedReader(new FileReader("array.txt"));

        //创建集合对象
        ArrayList<String> array = new ArrayList<String>();

        //读取数据,每次读取一行数据,把该行数据作为一个元素存储到集合中
        String line;
        while((line=br.readLine())!=null) {
            array.add(line);
        }

        //释放资源
        br.close();

        //遍历集合
        for(int x=0; x<array.size(); x++) {
            String s = array.get(x);
            System.out.println(s);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u013772906/article/details/78659579