IO笔记

1.java.io包下

File类:java程序中的此类的一个对象,就对应着硬盘中的一个文件或网络中的一个资源。
File file1 = new File("d:\io\helloworld.txt");
File file2 = new File("d:\io\io1");
1.File既可以表示一个文件(.doc .xls .mp3 .avi .jpg .dat),也可以表示一个文件目录!
2.File类的对象是与平台无关的。
3.File类针对于文件或文件目录,只能进行新建、删除、重命名、上层目录等等的操作。如果涉及到访问文件的内容,File
是无能为力的,只能使用IO流下提供的相应的输入输出流来实现。
4.常把File类的对象作为形参传递给相应的输入输出流的构造器中!

2.IO 流的结构

IO流体系

3.IO流的划分

  1. 按照流的流向的不同:输入流 输出流 (站位于程序的角度)
  2. 按照流中的数据单位的不同:字节流 字符流 (纯文本文件使用字符流 ,除此之外使用字节流)
  3. 按照流的角色的不同:节点流 处理流 (流直接作用于文件上是节点流(4个),除此之外都是处理流)

4.重点掌握

  • 抽象基类 节点流(文件流) 缓冲流(处理流的一种,可以提升文件操作的效率)
  • InputStream
    FileInputStream (int read(byte[] b)) BufferedInputStream (int read(byte[] b))
  • OutputStream
    FileOutputStream (void write(b,0,len)) BufferedOutputStream (flush()) (void write(b,0,len))
  • Reader
    FileReader (int read(char[] c)) BufferedReader (readLine()) (int read(char[] c))或String readLine()
  • Writer
    FileWriter (void write(c,0,len)) BufferedWriter (flush()) (void write(c,0,len)或void write(String str))
    注:
    1.从硬盘中读入一个文件,要求此文件一定得存在。若不存在,报FileNotFoundException的异常
    2.从程序中输出一个文件到硬盘,此文件可以不存在。若不存在,就创建一个实现输出。若存在,则将已存在的文件覆盖
    3.真正开发时,就使用缓冲流来代替节点流
    4.主要最后要关闭相应的流。先关闭输出流,再关闭输入流。将此操作放入finally

5.其它的流

1.转换流:实现字节流与字符流之间的转换

InputStreamReader:输入时,实现字节流到字符流的转换,提高操作的效率(前提是,数据是文本文件) ===>解码:字节数组--->字符串

OutputStreamWriter:输出时,实现字符流到字节流的转换。 ===>编码: 字符串---->字节数组

例子:从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序。

2.标准的输入输出流

System.in: The "standard" input stream:从键盘输入数据
System.out:The "standard" output stream:从显示器输出数据

3.打印流 (都是输出流) PrintStream(处理字节) PrintWriter(处理字符)

可以使用System.setOut(PrintStream p)重新设置一下输出的位置。
PrintStream p = new PrintStream(new FileOutputStream("hello.txt"),true);

4.数据流(处理基本数据类型、String类、字节数组)

DataInputStream DataOutputStream

5.对象流(用来处理对象的)

对象的序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象

ObjectInputStream(Object readObject();) ObjectOutputStream (void writeObject(Object obj))

如何创建流的对象:ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("person.txt")));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("person.txt")));

实现序列化机制的对象对应的类的要求:
①要求类要实现Serializable接口
②同样要求类的所有属性也必须实现Serializable接口
③ 要求给类提供一个序列版本号:private static final long serialVersionUID;
④属性声明为static 或transient的,不可以实现序列化

6.随机存取文件流:RandomAccessFile

6.1既可以充当一个输入流,又可以充当一个输出流:public RandomAccessFile(File file, String mode)
6.2支持从文件的开头读取、写入。若输出的文件不存在,直接创建。若存在,则是对原有文件内容的覆盖。
6.3 支持任意位置的“插入”。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。java.io ...
    Steven1997阅读 13,032评论 1 25
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 7,057评论 0 4
  • 刚刚失恋的女生,因为吸引就是情绪的波动,也许你认为好追,关键看你会不会用这个优势。 如果掌握不好,你有可能成为了备...
    伍阿哥漫画阅读 7,484评论 0 0
  • 黄桑,一个富有诗意的名字。位于湖南绥宁县境内,2013年被批准为国家级自然保护区。 如果你想到诗意和远方去,想享受...
    小小佘阅读 3,674评论 2 4
  • 看不到未来的恋爱迟早有一天要分手的,一切不过是时间的问题。但不管结局如何,都好好珍惜,不要辜负遇见。
    为独行找个借口阅读 1,696评论 0 0