java中io流系统庞大,知识点众多,作为小白通过五天的视频书籍学习后,总结了io系列的随笔,以便将来复习查看。

本篇为此系列随笔的第一篇:io系列之字符流。

IO流 :对数据的传输流向进行操作,java中将这种操作行为本身封装为对象,以供使用。

    Input and Output

    java将io流对象都在IO包中。(java.IO.*)

   分类:

       按照数据种类分: 字节流 和 字符流,
       按照数据流向分: 输出流 和 输入流。

       字节流抽象类: InputStream OutputStream
       字符流抽象类: Reader Writer
      (java中所有这四类派生出的子类都是以他们作为后缀的。)

一、字符流 之 文件操作:

    字符流主要用于对纯文本文件的操作,java中按照不同的操作类型根据以下两个基类定义了不同的字符流类。
    Reader     Writer

  一)、Writer: 字符输出流。

    以一个操作文件的例子进行说明: FileWriter (说明,该类对象必须指向一个文件,)

    构造方法:
        FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。
        FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。
        FileWriter(FileDescriptor fd) 构造与某个文件描述符相关联的 FileWriter 对象.

        FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象.
          使用示例及注意事项:
              如: FileWriter fw = new FileWriter("filme.txt");
            1、会在程序执行路径下创建一个filme.txt文件,该路径不因程序包名的变化而变化,只在传入的执行路径下。
            2、如果该路径下已有同名文件,那么该文件会被覆盖。

        FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
          使用示例及注意事项:
              如: FileWriter fw = new FileWriter("filme.txt",true);
            1、如果传入的参数为true,会在程序执行路径下打开一个已有的filme.txt文件, 并在文件末尾添加数据。
            2、如果该路径下没有该文件,则新建一个该文件, 并在文件末尾添加数据。
            3、如果传入的参数为false,无论有无文件都会新建该文件(等同于上一方法)。

      注意:1、以传入文件名的方式创建一个FileWriter对象(该对象一被初始化就必须明确被操作的文件)
         2、而且该文件会被新创建到指定目录下(或因参数打开一个已有文件)。
         3、路劲描述: 如: "D:\\java\\myclass\\winter.txt"。

         4、当然我们也可以传入一个File对象创建一个FileWriter对象。

    写入方法:void write(String str) 写入字符串。(其他数据类型可先转为字符串)
         void write(String str, int off, int len) 写入字符串一部分。(开始位与长度)
         void write(char[] cbuf, int off, int len) 写入字符数组的一部分(开始位和长度)(不传入角标默认全部)
         void write(int c) 写入单个字符。

          如: fw.write("winter is coming");//冰火又要出了,嘿嘿。

          注意:该方法只是将数据写入了流对象缓冲中,没有录入到指定文件中。

             off表示开始其实角标, len为长度。

    刷新方法:
         void flush() 刷新该流的缓冲。(将数据从流缓冲中存入到指定文件中);

          如: fw.flush();
             (此时数据(“winter is coming”) 被写入到文件中)。

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

          如: fw.close();
             (流对象在调用了flush后该流依然存在,但是调用了close方法后,该流对象被关闭,不再存在
              所以为了节约Windows资源,最后一定要 close ,关闭io。)

      注意: 1、几乎所有的IO操作都会抛出 IOException 异常,注意对异常的处理(try、catch或者throws)
          2、在程序调用Io结束后,一定使用 close语句结束流对象。

二)、Reader :字符输入流。
    以一个操作文件的例子进行说明: FileReader (说明,该类对象必须指向一个文件,)

    构造方法:
        FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader
          使用该构造方法会:
              如: FileReader fr = new FileReader("filme.txt");
            1、创建一个FileReader对象,该对象会指向 filme.txt 文件。
            2、该文件必须存在,否则抛出 FileNotFoundException 异常。

        FileReader(FileDescriptor fd) 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader

        FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader

    取出方法:
        int read() 读取单个字符, 返回值为该字符的本地电脑码的值,默认int类型, 可使用 (char) 强转为字符形式。
             从文件的开头, 随着该方法的不断调用,一直读到文件结尾, 之后返回 -1.

            如: int i = fr.read(), char c = (char)i;

        int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
                  将文件中的数据从文件头开始读取,并存入数组,直到文件中数据读完 或者 数组位置存满。
                  只要文件中还有数据可读,便返回读取的字符个数。如果文件中已经没有数据可读,返回-1.
            如: int i = 0; char [] c = new char[1024];
               while((i = fr.read(c))!=-1)
              { System.out.print(new String(c,0,i)); }

    结束方法:
        void close() 关闭该流并释放与之关联的所有资源。 此语句为必须执行语句。

二、字符流 之 缓冲功能

    缓冲区的出现是为了增加流的效率的,所以建立缓冲区之前必须要先有流对象。(底层使用数组实现)
    缓冲区对象只是给传入的流对象加了一个缓冲区,他的所有的读、写功能其实还是在调用原来的流对象的功能(close关闭的是流对象)

  一)、BufferedWrite :

    构造方法:
        BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。
              如:FileWriter fw = new FileWriter("c.txt");
                BufferedWriter bw = new BufferedWriter(fw);
            为流对象 fw建立了一个缓冲区对象 bw。

        BufferedWriter(Writer out, int sz) 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。
              如:FileWriter fw = new FileWriter("c.txt");
                BufferedWriter bw = new BufferedWriter(fw,1024);
            为流对象 fw建立了一个缓冲区对象 bw,缓冲长度为 1024个字符。
    写入方法:
        void write(写入的数据,格式同流对象方法) , void flush()
            与传入的流对象相同, 这些方法底层就是在调用流对象的相应方法。

    关闭方法:void close();
            与传入的流对象相同, 此方法底层就是在调用流对象的close方法,缓冲区调用了过后,流对象不用重复关闭。

    其他方法:
         void newLine() 输出一个跨平台的行分隔符。

二)、BufferedReader:

    构造方法:
        BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流
              如:FileReader fr = new FileReader("c.txt");
                BufferedReader br = new BufferedReader(fr);
            为流对象 fr建立了一个缓冲区对象 br。

        BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流
              如:FileReader fr = new FileReader("c.txt");
                BufferedReader br = new BufferedReader(fr,1024);
            为流对象 fr建立了一个缓冲区对象 br,缓冲长度为1024个字符。

    取出方法: 基本方法有流对象的相同(因为在调用流对象方法), 但是多了一个行读取方法。

         int read() 读取单个字符, 返回值为该字符的本地电脑码的值, 可使用(char)强转为字符形式。
                  从文件的开头, 随着该方法的不断调用,一直读到文件结尾, 之后返回 -1.

            如: int i = br.read(), char c = (char)i;

        int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分
                  将文件中的数据从文件头开始读取,并存入数组,知道文件中数据读完 或者 数组位置存满。
                  只要文件中还有数据可读,便返回读取的字符个数。如果文件中已经没有数据可读,返回-1.
            如: int i = 0; char [] c = new char[1024];
               while((i = br.read(c))!=-1)
              { System.out.print(new String(c,0,i)); }

        String readLine() 读取一个文本行。
                  返回一个字符串, 如果文档已经读完,返回 null 。
                  (本行读入方法 在文本数据获取中最为常用)
        注: 其返回的字符串中没有回车等换行终止符。

    结束方法:
        void close() 关闭该流并释放与之关联的所有资源。 此语句为必须执行语句。
               底层调用 流对象的 close 方法。

三)、LineNumberReader

    是 BufferedReader 的直接子类, 跟踪行号的缓冲字符输入流。
    此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号。

    基本方法: 基本方法等同于其父类 BufferedReader,

      如: String readLine() 读取文本行。

    特有方法: int getLineNumber() 获得当前行号。

          void setLineNumber(int lineNumber) 设置当前行号。

io系列之字符流的更多相关文章

  1. JAVA IO 字节流与字符流

    文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.     ...

  2. java IO(三):字符流

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  3. Java提高篇(二):IO字节流、字符流和处理流

    在我们的Java语言当中,通常会有对文件进行读写,因此我们引入java的IO类来进行文件的读写. 一.字节流 下面是一个字节流的实例: import java.io.*; public class I ...

  4. IO 复习字节流字符流拷贝文件

    /* 本地文件 URL 文件拷贝 *//*文本文件拷贝 可以通过 字符流,也可以通过字节流*/ /*二进制文件拷贝 只可以通过字节流*//* 希望这个例子能帮助搞懂 字符流与字节流的区别 */ imp ...

  5. 14、IO (字节流、字符流)

    输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 ...

  6. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)

    一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...

  7. IO Streams:字符流

    简介 Java平台使用Unicode约定存储字符值.字符流I / O自动将此内部格式转换为本地字符集.在西方,本地字符集通常是ASCII的8位超集. 对于大多数应用,具有字符流的I / O并不比具有字 ...

  8. Java IO 字节流与字符流 (五)

    Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...

  9. Java IO 字节流与字符流 (三)

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

随机推荐

  1. SSH的使用

    1.如何设置SSH的超时时间 使用SSH客户端软件登录linux服务器后,执行 echo $TMOUT可以查看SSH链接超时时间: 使用vim /etc/profile可以编辑配置页面 修改TMOUT ...

  2. Js--动态生成表格

    <div>        <h1>动态生成表格</h1>        <div id="table1">            行 ...

  3. 利用H5 FormData 实现表单中多图上传(可带其他如String类型数据)

    本篇的具体思路来源于右侧网址:http://blog.csdn.net/qq_19551571/article/details/49977983 本篇代码有所修改,请具体区分. 本篇使用的是 form ...

  4. 双系统windows+linux如何正确删除linux

    双系统windows+linux如何正确删除linux 2017年11月16日 10:42:49 dovepym 阅读数:26363   之前在windows的基础上又安装了ubuntu系统16.04 ...

  5. BZOJ4317Atm的树&BZOJ2051A Problem For Fun&BZOJ2117[2010国家集训队]Crash的旅游计划——二分答案+动态点分治(点分树套线段树/点分树+vector)

    题目描述 Atm有一段时间在虐qtree的题目,于是,他满脑子都是tree,tree,tree…… 于是,一天晚上他梦到自己被关在了一个有根树中,每条路径都有边权,一个神秘的声音告诉他,每个点到其他的 ...

  6. ElasticHD Windows环境下安装

    ElasticHD Linux环境下安装教程        ElasticHD windows环境下安装教程   习惯了T-SQL 查询,Elasticsearch的DSL查询语法简直就是反人类呀,一 ...

  7. Iroha and a Grid AtCoder - 1974(思维水题)

    就是一个组合数水题 偷个图 去掉阴影部分  把整个图看成上下两个矩形 对于上面的矩形求出起点到每个绿点的方案 对于下面的矩形 求出每个绿点到终点的方案 上下两个绿点的方案相乘后相加 就是了 想想为什么 ...

  8. 基于FPGA的16阶级联型iir带通滤波器实现

    警告 此文章将耗费你成吨的流量,请wifi下阅读,造成的流量浪费本人不承担任何责任.初版源代码获取(请勿用作他用,仅供学习):https://gitee.com/kingstacker/iir.git ...

  9. 【XSY2523】神社闭店之日 莫比乌斯反演

    题目大意 给你\(a_1\ldots a_n,l,c\)每次给你\(x,y\),求有多少个序列满足:长度\(\leq l\),每个元素是\([1,c]\),循环右移\(a_j(x\leq j\leq ...

  10. hdu 6253 (bfs打表)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6253 题意: 马可以往一个方向走两步,然后转个弯走一步,这样算一次动作,求问马n次动作后,能到达多少个点, ...