网站建设与制作与维护ppt,移动开发网,化妆品设计网站,跳转网站代码一、理解
1.简单而言#xff1a;流就是内存与存储设备之间传输数据的通道、管道。
2.流的分类#xff1a; (1) 按方向 ( 以 JVM 虚拟机为参照物 ) 【重点】 输入流#xff1a;将 存储设备 中的内容读入到 内存 中。 输…一、理解
1.简单而言流就是内存与存储设备之间传输数据的通道、管道。
2.流的分类 (1) 按方向 ( 以 JVM 虚拟机为参照物 ) 【重点】 输入流将 存储设备 中的内容读入到 内存 中。 输出流将 内存 中的内容写入到 存储设备 中 (2) 按单位 字节流以字节为单位可以操作所有类型的文件。 字符流以字符为单位只能操作文本类型的文件。 (3) 按功能 节点流具有基本的读写功能。 过滤流在节点流的基础上增加新的功能。
二、字节流
1.字节流的父类(抽象类) (1) InputStream 字节输入流 对应的操作为读操作 功能方法read 方法 (2) OutputStream: 字节输出流 对应的操作为写操作 功能方法write 方法 2.字节流的子类-节点流 (1) FileOutputStream 文件字节输出流 a. 构造方法
FileOutputStream fos new FileOutputStream(D:\\test2\\a.txt); 参数代表操作文件的路径指定的文件夹必须存在否则报错错误信息为 java.io.FileNotFoundException(文件找不到的异常)但是指定文件如果不存在则系统默认创建一个新的 文件路径绝对路径和相对路径 绝对路径带有盘符的路径例如 D:\\test2\\a.txt 相对路径相对当前项目查找对应的路径例如
FileOutputStream fos new FileOutputStream(file/a.txt); b. 功能方法 void write(int a)将单个字节内容写入到文件中 void close()关闭流释放系统资源
public class TestFileOutputStream {public static void main(String[] args) throws IOException {// 1. 创建文件字节输出流对象FileOutputStream fos new FileOutputStream(file/a.txt);// 2. 写文件fos.write(97);// 3. 关闭流: 释放资源fos.close();}
} (2) FileInputStream 文件字节输入流 a.构造方法 FileInputStream fosnew FileInputStream(“file/a.txt”); 参数代表要读取哪一个文件中的内容如果指定的文件不存在则系统不会自动创建而是抛出异常 java.io.FileNotFoundException: file\a.txt (系统找不到指定的文件)。 b. 功能方法 int read()一次性读取一个字节将读取的内容作为返回值进行返回如果达到文件尾部则返回-1 close():关闭流释放资源 3.字节流的子类-过滤流
(1)
BufferedInputStream/BufferedOutputStream// 1. 创建文件输入 输出流FileInputStream fis new FileInputStream(D:\\test\\ph.mp4);//读文件BufferedInputStream bis new BufferedInputStream(fis);FileOutputStream fos new FileOutputStream(file/ph_copy.mp4);BufferedOutputStream bos new BufferedOutputStream(fos);// 2. 读和写while(true){int nbis.read(); // 读if(n-1) break;bos.write(n);}// 3. 关闭流fis.close();fos.close(); (2) 过滤流 ObjectOutputStream/ObjectInputStream a. 增强了缓冲区功能 增强了读写8种基本数据类型和字符串功能 b. 增强了读写对象的功能 :readObject() 从流中读取一个对象 / writeObject(Object obj) 向流中写入一个对象 c. 对象放在流上进行传输的过程称为对象序列化。对象序列化的要求 [ 重点 ] 参与对象序列化的对象对应的类必须实现java.io.Serializable接口 transient修饰的属性不参与对象序列化 对象序列化达到文件尾部的标识 如果运行时抛出 java.io.EOFException代表读取的文件达到尾部 对象序列化的细节 如果对象的属性是自定义类型的对象时则该对象也必须是可序列化的 如果对集合进行对象序列化必须保证该集合中的所有元素是可序列化的
三、字符流
1.字符流的父类(抽象类) (1) Reader 字符输入流 对应的操作为读操作 功能方法read 方法 (2) Writer: 字符输出流 对应的操作为写操作 功能方法write 方法 2.文件字符输入/输出流 (1) FileWriter 文件字符输出流继承 Writer 中的方法 public void write(int n):将单个字符写入到文件中 (2) FileReader 文件字符输入流继承 Reader 中的方法 public int read():一次读取一个字符的内容 3.字符过滤流 (1) BufferedReader 增强读取一行内容的方法 String readLine() 一次性读取一行内容返回值为 String 达到文件尾部时返回 null (2) PriterWriter 一次性写入一行内容 println(String str)将一行内容写入到文件自动换行 print(String str)将一行内容写入到文件不自动换行 4.桥转换流 InputStreamReader 、 OutputStreamWriter (1) 字符流和字符流之间转换的通道 (2) 指定编解码格式
public class TestInputStreamReader {public static void main(String[] args) throws IOException {// 1. 创建文件字节输入流对象( 基础流 ) - 不能更改文件编码格式 (GBK)FileInputStream fis new FileInputStream(file/m.txt);// 2. 创建桥转换流指定编解码格式为 GBKInputStreamReader isr new InputStreamReader(fis,GBK);// 3. 包装过滤流增强读操作BufferedReader br new BufferedReader(isr);// 4. 读操作while(true){String s br.readLine();if(snull) break;System.out.println(s);}// 5. 关闭流br.close();}
}
package testio2;import java.io.*;
public class TestInputStreamReader {public static void main(String[] args) {BufferedReader br null;try {// 1. 创建文件字节输入流对象(基础流 ) - 不能更改文件编码格式 (GBK)FileInputStream fis new FileInputStream(file/m.txt);// 2. 创建桥转换流指定编解码格式为 GBKInputStreamReader isr new InputStreamReader(fis, GBK);// 3. 包装过滤流增强读操作br new BufferedReader(isr);// 4. 读操作while (true) {String s br.readLine();if (s null) break;System.out.println(s);}}catch (Exception e){e.printStackTrace();}finally {if(br!null){// 5. 关闭流try {br.close();} catch (IOException e) {e.printStackTrace();}}}}
}