• JAVA基础IO流(一)



    一、IO流

        IO流是Java为方便我们对文件的读写进行操作而提供的一种技术。按照读取写入文件的方式不同可以分为字符流和字
    节流,而每个流派按照功能又分为读和写。字符流读写操作的根类为Reader和Writer,其实现的常用子类分别为、写:
    PrintWriter、FileWriter、BufferedWriter、OutputStreamWriter(这个为转换流后边会详细说)。读:BufferedReader、
    InputStreamReader(转换流)、 FileReader。

    二、Reader抽象类

        Reader为用于读取字符流的抽象类,为其子类定义了一些常用方法:
    (1)关闭流并释放资源、close()

    (2)读取单个字符、read()
    返回值为int类型(作为整数读取字符 - 字符对应的ASCII值,读取不到值则返回-1)。

    (3)将字符读入字符数组、read(char[] cbuf) 

    返回值为int(读取的字符数,如果已到达流的末尾,则返回 -1 )。

    1、FileReader类

        FileReader类为Reader抽象类的间接继承类(爷爷类),其直系父类为InputStreamReader类,是用来读取字符文件的便
    捷类。其常用的构造方法为:
    (1)FileReader(String fileName),如果是相对路径(读取文件在你的项目根目录),参数为要读取的文件名。如果是绝对
    路径的话(在你电脑的其他盘),参数则为全的路径名、如:"d:\\lala.java"。

    (2)FileReader(File file) ,参数为要读取的File对象(File类可以通过传入字符类型的文件路径 - File(String pathname)
    、URI - File(URI uri) 、父目录的File对象加子路径 - File(File parent, String child)、根据 parent 路径名字符串和
    child 路径名字符串创建一个新 File 实例 - File(String parent, String child) )。

        * 一次读取一个字符举例:

     1 //throws IOException抛出IO异常
     2 public static void main(String[] args) throws IOException {
     3 //创建FileReader对象,传入相对路径
     4 FileReader reader = new FileReader("lcy.txt");
     5 //接收读取的字符
     6 int i;
     7 //循环读取,当读完整个文件时i=-1退出循环
     8 while ((i = reader.read()) != -1) {
     9 //转为char类型
    10 char s=(char) i;
    11 System.out.println(s);
    12 }
    13 //关闭流
    14 reader.close();
    15 }


        ** 一次读取一个字符数组举例:

     1 public static void main(String[] args) throws IOException {
     2 //创建FileReader对象,传入相对路径
     3 FileReader reader = new FileReader("lcy.txt");
     4 //数组的长度
     5 int i;
     6 char[] ch=new char[1024];
     7 //循环读取,将读出来的字符存到ch数组里,当读完整个文件时i=-1退出循环
     8 while ((i=reader.read(ch))!=-1) {
     9 System.out.println(Arrays.toString(ch));
    10 }
    11 //关闭流
    12 reader.close();
    13 }

    2、BufferedReader类

        BufferedReader类是从字符输入流中读取文本,缓冲各个字符,从而实现高效读取,他是一种高效的读取方式。
    BufferedReader类可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。其常用的
    构造方法为BufferedReader(Reader in) ,创建一个使用默认大小输入缓冲区的缓冲字符输入流。除了继承父类所
    有方法外,其特有的方法有:
    (1)读取一个文本行、readLine()。
        * 举例:

     1 //throws IOException抛出IO异常
     2 public static void main(String[] args) throws IOException {
     3 //创建FileReader对象,传入相对路径
     4 FileReader reader = new FileReader("lcy.txt");
     5 //根据FileReader对象,创建BufferedReader对象
     6 BufferedReader bufferedReader = new BufferedReader(reader);
     7 //存放读取的一行数据
     8 String s;
     9 //循环读取,当读取的字符串为空时退出循环
    10 while ((s = bufferedReader.readLine()) != null) {
    11 System.out.println(s);
    12 }
    13 //关闭流
    14 bufferedReader.close();

     

    三、Writer类

        写入字符流的抽象类,他为其子类提供了一些常用的方法:

    (1)关闭此流,但要先刷新它、close()。

    (2)刷新该流的缓冲,将数据刷入到文件里、flush()。

    (3)写入字符数组、write(char[] cbuf)。

    (4)写入单个字符、write(int c)。

    (5)写入字符数组的某一部分、write(char[] cbuf, int off, int len)。

    (6)写入字符串、write(String str)。

    (7)写入字符串的某一部分、write(String str, int off, int len)。

    1、FileWriter类

        FileWriter类为Writer抽象类的间接继承类(爷爷类),其直系父类为OutputStreamWriter类,用来写入字符文件的
    便捷类。他继承了Writer类的全部方法。其常用的构造方法与FileReader类一样,只不过FileReader类的文件路径一定要
    存在,而FileWriter类的文件路径如果存则在指定文件上写,如果不存在则会新建一个文件。

        * 常用方法举例:

     1 // throws IOException抛出IO异常
     2 public static void main(String[] args) throws IOException {
     3 // 创建FileReader对象,传入相对路径
     4 FileReader reader = new FileReader("lcy.txt");
     5 // 根据FileReader对象,创建BufferedReader对象
     6 BufferedReader bufferedReader = new BufferedReader(reader);
     7 // 创建FileWriter对象
     8 FileWriter fileWriter = new FileWriter("Demo.txt");
     9 // 存放读取的一行数据
    10 String s;
    11 // 循环读取,当读取的字符串为空时退出循环
    12 while ((s = bufferedReader.readLine()) != null) {
    13 // 像Demo.txt文件写入数据
    14 fileWriter.write(s);
    15 }
    16 // 关闭流
    17 bufferedReader.close();
    18 fileWriter.close();
    19 fileWriter.close();

        ** 一次写入一个数组举例:

     1 public static void main(String[] args) throws IOException {
     2 // 标准输入流
     3 InputStream in = System.in;
     4 // 转换流
     5 InputStreamReader inputStreamReader = new InputStreamReader(in);
     6 // 创建FileWriter对象
     7 FileWriter fw = new FileWriter("a.txt");
     8 // 存储数组长度
     9 int i;
    10 char[] c = new char[1024];
    11 // 循环读取
    12 while ((i = inputStreamReader.read(c)) != -1) {
    13 // 将数组写入到指定文件,从0一直写到i,目的是为了防止出现重复数据
    14 fw.write(c, 0, i);
    15 //
    16 fw.flush();
    17 
    18 }
    19 // 关闭资源
    20 fw.close();
    21 inputStreamReader.close();
    22 }

    2、BufferedWriter类

        将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。其常用构造方法与
    BufferedReader类类似。除了继承父类所有方法外,还有其特有的方法:
    (1) 写入一个行分隔符、newLine(),无论是Windows系统还是Mac系统都可以实现换行的效果。

    (2) 写入字符串的某一部分、write(String s, int off, int len)

        * 举例:

     1 // throws IOException抛出IO异常
     2 public static void main(String[] args) throws IOException {
     3 // 创建FileReader对象,传入相对路径
     4 FileReader reader = new FileReader("lcy.txt");
     5 // 根据FileReader对象,创建BufferedReader对象
     6 BufferedReader bufferedReader = new BufferedReader(reader);
     7 // 创建FileWriter对象
     8 FileWriter fileWriter = new FileWriter("Demo.txt");
     9 //创建BufferedWriter对象
    10 BufferedWriter writer = new BufferedWriter(fileWriter);
    11 // 存放读取的一行数据
    12 String s;
    13 // 循环读取,当读取的字符串为空时退出循环
    14 while ((s = bufferedReader.readLine()) != null) {
    15 // 像Demo.txt文件写入数据
    16 writer.write(s);
    17 // 写一行后换行
    18 writer.newLine();
    19 }
    20 // 关闭流
    21 bufferedReader.close();
    22 writer.close();

    3、PrintWriter类

        PrintWriter具有自动刷新行的功能,如果启用了自动刷新,则只有在调用 println、printf 或 format 的
    其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。其常用的构造方法为:
    (1)使用指定文件创建不具有自动行刷新的新 PrintWriter - PrintWriter(File file)

    (2)根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter - PrintWriter(OutputStream out)

    (3)创建不带自动行刷新的新 PrintWriter - PrintWriter(Writer out)

    (4)创建新 PrintWriter - PrintWriter(Writer out, boolean autoFlush) 带自动刷新

    (5)通过现有的 OutputStream 创建新的 PrintWriter - PrintWriter(OutputStream out, boolean autoFlush)
    可以自动刷新。

        常用方法:
    (1)打印 Object,然后终止该行。println(Object x) - String、boolean、int、double、char都可以打印、很全面。

        * 举例:

     1 public static void main(String[] args) throws Exception {
     2 // 根据new FileReader("lcy.txt")创建BufferedReader对象
     3 BufferedReader br = new BufferedReader(new FileReader("lcy.txt"));
     4 // 创建PrintWriter对象,开启自动刷新
     5 PrintWriter printWriter = new PrintWriter(new FileWriter("d:\\lcy.java"), true);
     6 String s;
     7 while ((s = br.readLine()) != null) {
     8 // 写入数据
     9 printWriter.println(s);
    10 }
    11 // 关闭资源
    12 printWriter.close();
    13 br.close();
    14 }
    我们在键盘上留下的余温,也将随时代传递到更远的将来~
  • 相关阅读:
    HDU_1006_Tick and Tick
    HDU_1011_Starship Troopers_树型dp
    HDU_1520_Anniversary party_树型dp
    HDU_1176_免费馅饼_16.4.23再做
    HDU_1203_01背包
    HDU_1421_搬寝室_dp
    HDU_1505_矩阵中的最大矩形_dp
    STL_map的使用
    Semantic-UI-React (称 stardust) 对比 Antd
    meteor 为基础,联合 Apollo + React + React-Router
  • 原文地址:https://www.cnblogs.com/0813lichenyu/p/7583464.html
Copyright © 2020-2023  润新知