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 流的体系结构
3. IO 流的划分
1). 按照流的流向的不同 : 输入流 输出流 (站位于程序的角度)
2). 按照流中数据单位的不同 : 字节流 字符流 (纯文本文件使用字符流,除此之外使用字节流)
3). 按照流的角色的不同 : 节点流 处理流 (流直接作用于文件上节点流,除此之外是处理流)
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 : 输出时, 实现字符流到字节流的转换。 ===> 编码: 字符串 ---> 字节数组
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
> 既可以充当一个输入流,又可以充当一个输出流: public RandomAccessFile (File file, String mode)
>支持从文件的开头读取,写入。若输出的文件不存在,直接创建。若存在,则是对原有文件内容的覆盖。
>支持任意位置的“插入”。