-
java.io包
- File类:Java程序中的一个对象,对应着硬盘中的一个文件或者网络中的一个资源。
File file = new File("d:\\io\\hello.txt"); File content = new File("d:\\io");
- File类对象,既可以表示一个文件(.doc.xls.mp3.avi),也可以表示一个目录.
- File类的对象是与平台无关的.
- File类针对于文件或者目录.只能进行新建 删除 重命名等操作,
如果涉及到访问文件内容,File无法操作,必须使用IO流下相应的输入输出流实现. - 通常File类对象会作为形参传递到输入输出流的构造器中去.
-
IO流的结构
-
基本结构
类型 字节输入流 字节输出流 字符输入流 字符输出流 抽象基类 InputStream OutputStream Reader Writer 访问文件 FileInputStream FileOutputStream FileReader FileWriter 访问数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 访问管道 PipedInputStream PipiedOutputStream PipedReader PipedWriter 访问字符串 null null StringReader StringWriter 缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter 转换流 null null InputStreamReader OutputStreamWriter 对象流 ObjectInputStream ObjectOutputStram null null 打印流 null PrintStream null PrintWriter -
IO流的划分
- 按照流的流向的不同:输入、输出(自己立足于程序的角度)
- 按照流中的数据单位的不同:字节流、字符流(纯文本文件使用字符流、除此以外使用字节流)
- 按照流的作用方式的不同:节点流、处理流(流直接作用于文件的是节点流,4个节点流之外均为处理流)
-
-
基本读写的实现
抽象基类 节点流(文件流) 缓冲流(处理流的一种) InputStream FileInputStream(int read(byte[] b)) BufferedInputStream OutputStream FileOutputStream(void write(b,0,len)) BufferedOutputStream(flush) Reader FileReader(int read(char[] c)) BufferedReader(readLine()) Writer FileWriter(void write(c,0,len)) BufferedWriter(flush()) - 从硬盘中读入一个文件要求此文件必须是存在的,若不存在,报异常FileNotFoundException
- 从程序中输出一个内容到硬盘,此文件可以不存在,若不存在会自动创建。
- 实际使用的时候,更建议使用缓冲流来代替节点流或者文件流
- 注意要关闭相应的流,一般来说,先关闭输出流,再关闭输入流,关闭操作放入finally中
-
其他类型的流
- 转换流:实现字节流于与字符流之间的转换
//InputStreamReader;输入时,实现字节流到字符流的转换,提高操作效率(注意,数据是文本文件),此为解码 //OutputStreamReader:输出时,实现字符流到字节流的转换,此为编码。
- 标准的输入/输出流:System.in/System.out
System.in:The "standard" input stream;从键盘输入数据 System.out:The "standard" output stream;从显示器输出数据
- 打印流(都是输出流)PrintSteam(处理字节) PrintWriter(处理字符)
PrintStream p = new PrintStream(new FileOutputStream(new File("hello.txt"), true)) System.setOut(PrintStream p)//重新设置一下输出位置
- 数据流(处理基本数据类型、String类、字节数组)
DataInputStream DataOutputStream
- 对象流
//对象的序列化机制:允许将内存中的Java对象转换成平台无关的二进制流, // 从而将这种二进制流持久地保存在磁盘上,或通过网络发送出去。 //创建输出流对象,将类对象写入 ObjectOutputStream oos = new ObjectOutputStream(new File("Person.txt")); oos.writeObject(Object obj); //创建输入流对象,还原出类对象 ObjectInputStream ois = new ObjectInputStream(new File("Person.txt")); ois.readObject(Object obj);
实现序列化机制的对象对应的类的要求: 类要实现Serialiable接口、类的所有属性也必须实现Serialiable接口、 给类提供一个版本序列号:private static final long serialVersionUID 属性声明为static或者transient的不可以实现序列化
- 随机存取文件流(RandomAccessFile)
- 构造方法如下,既可以充当输入流,也可以充当输出流
public RandomAccessFile(File file, String mode); /* 其中mode的取值如下所示: * r:以只读方式打开 * rw:打开以便读取和写入 * rwd:打开以便读取和写入;同步文件内容的更新 * rws:打开以便读取和写入;同步文件内容和元数据的更新 */ public RandomAccessFile(String name, String mode);
- 支持从文件的开头读取、写入;若输出的文件不存在,直接创建;若输出文件存在,则是对原文件内容的覆盖
- 支持从任意位置的“插入”
网友评论