05 输入输出(IO)

来源:互联网 发布:为什么运营商封80端口 编辑:程序博客网 时间:2024/04/28 17:29

五、输入输出(IO)

1.IO流

  1. IO流用来处理设备之间的 数据传输
  2. Java对数据的操作是通过 流 的方式
  3. Java用于操作流的对象都在 IO包 中
  4. 流按操作数据分为两种: 字节流 与 字符流
  5. 流按流向分为: 输入流 , 输出流

IO流常用基类

  1. 字节流 的抽象基类:
    InputStreamOutputStream
  2. 字符流 的抽象基类:
    ReaderWriter

注:由这四个类派生出来的子类名称都是
以其父类名作为子类名的后缀。
• 如:InputStream的子类FileInputStream
• 如:Reader的子类FileReader

IO程序的书写

  1. 导入 IO包中的类
  2. 进行IO 异常处理
  3. 在finally中对流进行 关闭

2.字符流

字符流——创建文件

  1. 创建流对象,建立数据存放文件
    FileWriter fw = new FileWriter(“Test.txt”);
  2. 调用流对象的写入方法,将数据写入流
    fw.write(“text”);
  3. 关闭流资源,并将流中的数据清空到文件中。
    fw.close();
FileWriter fw = null;try{    fw = new FileWriter("Test.txt");    fw.write("text");}catch(IOException e){    System.out.println(e.toString());}finally{    if(fw != null)        try{        fw.close();    }catch(IOException e){        System.out.println(e.toString());    }}

字符流——读取文件

  1. 建立一个流对象,将已存在的一个文件加载进流。
    FileReader fr = new FileReader(“Test.txt”);
  2. 创建一个临时存放数据的数组。
    char[] ch = new char[1024];
  3. 调用流对象的读取方法将流中的数据读入到数组中。
    int len = fr.read(ch);
FileReader fr = null ;try {fr = new FileReader("c:\\test.txt");char [] buf = new char[1024];int len= 0;while ((len=fr.read(buf))!=-1){     System.out.println(new String(buf,0,len));     }}catch (IOException e){     System.out.println("read-Exception:"+e.toString());}finally{if(fr!=null){try {     fr.close();     }     catch (IOException e){     System.out.println("close-Exception:"+e.toString());     }}}

定义文件路径时,可以用“ / ”或者“ \ ”。
在创建一个文件时,如果目录下有同名文件将被 覆盖 。
在读取文件时,必须保证该文件已存在,否则出 异常 。

3.字符流的缓冲区

缓冲区的出现提高了对数据的读写效率。

对应类
• BufferedWriter
• BufferedReader

缓冲区要结合流才可以使用
在流的基础上对流的功能进行了增强

4.装饰设计模式

对原有类进行了功能的 改变 , 增强 。
装饰模式的基本格式。
它与继承有什么不同?
了解BufferedReader的原理。

5.字节流

  1. 基本操作与字符流类相同
  2. 但它不仅可以操作字符,还可以操作其他 媒体文件

字节流的缓冲区
同样是 提高 了字节流的 读写效率

6.转换流

InputStreamReader , OutputStreamWriter

转换流的 由来

  1. 字符流与字节流之间的 桥梁
  2. 方便了字符流与字节流之间的 操作

转换流的 应用

  1. 字节流中的数据都是字符时,转成字符流操作更高效
  2. 有关编码问题时候

7.标准输入输出流

  1. System类中的字段: in , out 。
  2. 它们各代表了系统标准的 输入 和 输出 设备。
  3. 默认输入设备是 键盘 ,输出设备是 显示器 。
  4. System.in 的类型是 InputStream .
  5. System.out 的类型是 PrintStream 是OutputStream的子类FilterOutputStream 的子类.
    1

8.流的基本应用小节

  1. 流是用来处理数据的。
  2. 处理数据时,一定要 先明确数据源 ,与 数据目的地 (数据汇)。
  3. 数据源可以是文件,可以是键盘。
  4. 数据目的地可以是文件、显示器或者其他设备。
  5. 而流只是在帮助数据进行传输,并对传输的数据进行处理,比如过滤处理.转换处理等。

2

3

9.File类

  1. 用来将 文件 或者 文件夹 封装成 对象
  2. 方便对文件与文件夹的 属性信息 进行 操作
  3. File对象可以作为参数 传递给流 的构造函数。
  4. 了解File类中的常用方法。

10.IO包中的其他类

1)RandomAccessFile

随机访问文件,自身具备读写的方法。
通过skipBytes(int x),seek(int x)来达到随机访问。

2)管道流

PipedInputStreamPipedOutputStream
输入输出可以直接进行连接,通过结合线程使用。

3)打印流

• PrintWriter 与 PrintStream
• 可以直接操作输出流和文件。

4)序列流

• SequenceInputStream
• 对多个流进行合并。

5)操作对象

• ObjectInputStream 与 ObjectOutputStream
• 被操作的对象需要实现 Serializable (标记接口)

6)操作基本数据类型

 •  DataInputStream 与 DataOutputStream

7)操作字节数组

 •  ByteArrayInputStream 与 ByteArrayOutputStream

8)操作字符数组

 •  CharArrayReader 与 CharArrayWrite

9)操作字符串

 •  StringReader 与 StringWriter

11.字符编码

  1. 字符流 的出现为了方便操作 字符 。
  2. 更重要是的加入了 编码转换 。
  3. 通过子类 转换流 来完成。
    • InputStreamReader
    • OutputStreamWriter
  4. 在两个对象进行构造的时候可以加入字符集。

常见的编码表

  1. ASCII :美国标准信息交换码。
    • 用一个字节的7位可以表示。
  2. ISO8859-1 :拉丁码表。欧洲码表
    • 用一个字节的8位表示。
  3. GB2312 :中国的中文编码表。
  4. GBK :中国的中文编码表升级,融合了更多的中文文字符号。
  5. Unicode :国际标准码,融合了多种文字。
    • 所有文字都用两个字节来表示, Java语言使用的就是unicode
  6. UTF-8 :最多用三个字节来表示一个字符

转换流的编码应用

  1. 可以将字符以指定编码格式 存储 。
  2. 可以对文本数据指定编码格式来 解读 。
  3. 指定编码表的动作由 构造函数 完成

字符编码

  1. 编码:字符串–>字节数组
  2. 解码:字节数组–>字符串
0 0
原创粉丝点击