IO流基础归纳总结

IO流的概念

流:线性的,有方向的。
IO:input(输入)和 output(输出)。

JAVA中IO流的分类:

在这里插入图片描述
图片来自网络

字节流:

  Java最底层的流,可以读写任何文件(纯文本、视频、图像、声音…),以字节为单位。
因为:一切皆为“字节”
A).输出流:OutputStream(抽象类)
B).输入流:InputStream(抽象类)

字符流:

  基于字节流的,可以很方便的读写“纯文本”文件,以字符为单位,每次读取多个字节。(只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。)
   A).输出流:
   B).输入流:

IO流_字节输出流_FileOutputStream:

构造方法:
  1)new FileOutputStream(String name) :(覆盖)创建文件输出流以指定的名称写入文件。
  2).FileOutputStream(String name, boolean append) (追加)创建文件输出流以指定的名称写入文件。
  3).FileOutputStream(File file):(覆盖)创建文件输出流以写入由指定的 File对象表示的文件。
  4).FileOutputStream(File file, boolean append) (追加)创建文件输出流以写入由指定的 File对象表示的文件。
注意:Java中所有的“输出流”构造时,文件可以不存在,会自动创建一个;

字节写入(输出)的方法:(三种)
   A).write(int b):输出一个字节;
   B).write(byte[] byteArray):输出一个字节数组;
  C).write(byte[] byteArray,int off,int len):输出字节数组的一部分;
   1).byteArray : 要写入的数组;
   2).off : 起始位置索引;
    3).len : 输出的数量;

public static void main(String[] args) throws IOException {
    //1.构造方法:
    FileOutputStream out = new FileOutputStream("demo.txt",false);

    //2.输出的方法:
    //2-1:write(int b):输出一个字节
    out.write(97);//97 --> 转换为二进制: 0110 0001 --> 写入文件:0110 0001
    out.write(999997);//999997 -->转换为二进制:111101000010 0011 1101 --> 取最低的一个字节:写入文件:0011 1101

    //2-2:write(byte[] byteArray):输出多个字节
    byte[] byteArray = {97, 98, 99, 100};
    out.write(byteArray);
     //间接的输出一个“字符串” 
     out.write("大家好,呵呵".getBytes());
     //输出一个换行符:
     out.write("\r\n".getBytes());


    //2-3:write(byte[] byteArray,int offset,int len):
    //例如:写入byteArray数组中的99,100
    out.write(byteArray,2,2);
    //关闭流--释放资源
     out.close();
}

IO流_字节输入流_FileInputStream:

 1).构造方法:
   1.FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
   2.FileInputStream(File file) 通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
注意: Java中所有的“输入流”构造时,文件必须存在,否则抛出异常;
读取的方法:
  1).public int read():读取一个字节
  2).public int read(byte[] byteArray):读取多个字节,封装到参数数组中。

	public class Demo {
    	public static void main(String[] args) throws IOException {
        File file = new File("demo.txt");
        if (!file.exists()) {
            file.createNewFile();
        }
        FileInputStream in = new FileInputStream(file);

        //读一个字节
        /*int b = 0;
        while ((b = in.read()) != -1) {
            System.out.println((char)b);
        }*/

        //读取多个字节:3个
        byte[] byteArray = new byte[3];
        int len = 0;
        while ((len = in.read(byteArray)) != -1) {
            //将 byte[]数组转换为String
            String str = new String(byteArray,0,len);
            System.out.println("转换为String后:" + str);
        }
    }
}

IO流_字符流_输出流FileWriter

(只能使用系统默认字符集)
构造方法:
1).FileWriter(String fileName)构造一个文件名的FileWriter对象。
2).FileWriter(String fileName, boolean append)构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
3).FileWriter(File file) 给一个File对象构造一个FileWriter对象。
4).FileWriter(File file, boolean append)(追加) 给一个File对象构造一个FileWriter对象。
输出方法:
 1).write(int c):输出一个字符;
 2).write(char[] chArray):输出一个字符数组;
 3).write(char[] chArray,int off,int len):输出字符数组的一部分;
  4).write(String str):输出一个字符串;
  5).write(String str,int off,int len):输出字符串的一部分;

public static void main(String[] args) throws IOException {
        //注意:构造时,文件可以不存在,会自动创建
        FileWriter out = new FileWriter("demo.txt");

        //**********五个输出的方法*************************************//
        //1.write(int c):输出一个字符
        out.write(98);
        //2.write(char[] chArray):输出一个字符数组
        char[] chArray = {'a','b','你','好','呵','呵'};
        out.write(chArray);

        //3.write(char[] chArray,int off,int len("输出字符数组的一部分;
        out.write(chArray,4,2);

        //4.write(String s):输出一个字符串
        out.write("我爱IO");

        //5.write(String s,int off,int len):输出字符串的一部分
        String str = "北京天安门前";
        out.write(str,4,3);

        //*******************输出换行************************//
        out.write("\r\n");
        out.write("你好");
        //刷新缓存区
//        out.flush();
	   //注意:"字符流"内部自带缓存区,write()之后一定要flush()/close()才能
	   //将缓存区的数据写入到文件。
        out.close();//相当于:flush() + close()
    }

字符流_输入流FileReader:

构造方法:
1).FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称。
2).FileReader(File file) 创建一个新的 FileReader ,给出 File读取。
读取的方法:
1).int read():读取一个字符;返回值为读取的字符的“编码”
2).int read(char[] chArray):读取多个字符,存储到字符数组中。
返回值是读取的字符的“数量”。

public static void main(String[] args) throws IOException {
    FileReader in = new FileReader("demo03.txt");
    //一次读取一个字符
    /*int c = 0;
    while ((c = in.read()) != -1) {
        System.out.println("读取的字符:" + (char)c);
    }*/
    
    //一次读取一个字符数组
    char[] chArray = new char[2];
    int len = 0;
    while ((len = in.read(chArray)) != -1) {
        //可以将一个字符数组的一部分转换为String
        String str = new String(chArray,0,len);
        System.out.println(str);
    }
    in.close();
}

字符流与字节流转换

转换流的特点:

1.其是字符流和字节流之间的桥梁
2.可对读取到的字节数据经过指定编码转换成字符
3.可对读取到的字符数据经过指定编码转换成字节

何时使用转换流?
1.当字节和字符之间有转换动作时;
2.流操作的数据需要编码或解码时。
3.具体的对象体现:
InputStreamReader:字节到字符的桥梁
OutputStreamWriter:字符到字节的桥梁
这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。

发布了8 篇原创文章 · 获赞 0 · 访问量 38

猜你喜欢

转载自blog.csdn.net/FearSun/article/details/105389794
今日推荐