IO的概念和分类: 1.什么是IO流? 2.什么是输入? 3.什么是输出? 4.IO流有哪些分类? (1.)IO流就是 读入,写出流。 (2.)输入就是读取文件内容 FileInputStream fis = new FileInputStream(文件地址\\文件名.文件类型); (3.)输出就是输出指定内容到制定路径下的文件中 FileOutputStream fos = new FileOutputStream(文件地址\\文件名.文件类型) (4.)IO流有 字节流,字符流 字节流: 字节输入流: java.io.InputStream 抽象类 字节输出流: java.io.OutputStream 抽象类 字符流: 字符输入流: java.io.Reader 抽象类 字符输出流: java.io.Writer 抽象类 5.字节输出流: OutputStream和FileOutputStream OutputStream是抽象类 有哪些共性方法? OutputStream的共性方法有.close .flush FileOutputStream是普通类 可以做什么? C:/Users/win/AppData/Local/YNote/data/qq51705C22557BC4566B6FB12F9448BCB0/4c609a6d49cb404baf09ca6b86113349/clipboard.png
java.io.OutputStream抽象类: 字节输出流 (顶层类) // 成员方法 void close() :释放资源 void flush() :刷新缓冲区(对于字节流来说没有作用) // 写字节的成员方法 abstract void write(int b): 一次写一个字节 (参数int便于传递byte的整数不用强转) void write(byte[] b): 一次写一个字节数组 void write(byte[] b, int offset, int len): 一次写一个字节数组的一部分 java.io.FileOutputStream类: 文件字节输出流 (向文件写数据) // 构造方法 FileOutputStream(String name): 通过文件路径创建文件字节输出流 FileOutputStream(File file): 通过File对象创建文件字节输出流 构造方法的作用: 1. 创建一个FileOutputStream对象 2. 根据构造方法传递的路径, 在磁盘上创建一个空文件 ("如果文件存在则会清空数据") 3. 将创建的FileOutputStream对象指向这个磁盘上的文件
字节输出流: 一次写一个字节到文件 了解Java程序将数据写入文件的原理 FileOutputStream写数据到文件需要哪3步 写数据的原理: Java程序 -> JVM虚拟机 -> OS操作系统 -> OS调用写数据的方法 -> 将数据写入文件 使用字节输出流写数据到文件的步骤: 1. 创建对象: 创建FileOutputStream对象, 构造方法中传递文件路径 2. 写入数据: 使用FileOutputStream对象调用 write(int b) 方法, 将字节写入文件 3. 释放资源: 使用FileOutpu
5分钟练习: 使用FileOutputStream写数据到文件 需求: 创建FileOutputStream对象, 路径传递当前模块下的testOutputStream1.txt文件 "day09\\testOutputStream1.txt" write() 写入 97, 98, 99 close() 释放资源 打开文件查看 public class Test { public static void main(String[] args) throws IOException { // 为了学习IO流时不让try catch打乱代码结构, 我们先throws声明抛出 // 1. 创建文件字节输出流对象 FileOutputStream fos = new FileOutputStream("day09\\testOutputStream1.txt"); // 2. 写数据 fos.write(97); fos.write(98); fos.write(99); // 3. 释放资源 fos.close(); } }
文件存储原理和记事本打开文件的原理 向文件中写入字节数据时, 写入的是什么进制的数据 写入文件的是数字, 但文本编辑器打开后为什么会显示为字符 向文件中写入字节数据时, 十进制的数字会被转换为"二进制"的数字写入文件 文本编辑器打开文本文件时, 会先查询编码表, 将二进制数字转换为对应的字符进行显示 0-127: 查询ASCII码表 -128~127 其他: 查询系统默认码表 Windows简体中文系统的程序打开是按 GBK 码表 IDEA中使用的是 UTF-8 码表 ASCII编码表: 1个byte就是一个字符 97 a
字节输出流: 一次写多个 如何一次性写入多个byte 如何获取一个字符串对应的byte String -> byte "abc" -> byte byte byte 补充: java.lang.String类: byte[] getBytes(): 使用平台的默认字符集将此String编码为byte数组 java.io.FileOutputStream类: 文件字节输出流 (向文件写数据) void write(byte[] b): 一次写一个字节数组 void write(byte[] b, int off, int len): 一次写一个字节数组的一部分 Java中, byte的范围是 -128 ~ 127 共256个数值 编码表中字符范围是 0 ~ 255 共256个数值 写多个字节时: 如果第一个字节是正数中的 0~127, 则记事本会查询 ASCII码表 显示字符 如果第一个字节是负数中的:-128~-1, 则记事本会查询 GBK码表 显示字符.(将两个连续的byte组合为一个中 文) FileOutputStream fos = new FileOutputStream(new File("09_IOAndProperties\\b.txt")); byte[] bytes2 = "你好".getBytes(); System.out.println(Arrays.toString(bytes2));//[-28, -67, -96, -27, -91, -67] fos.write(bytes2); //释放资源 fos.close(); 字节输出流: 续写, 换行 如何在文件已有内容之后, 接着写入内容 (续写)? 如何在文件中写入换行, Windows系统的换行符号是什么? java.io.FileOutputStream类: 文件字节输出流 // 带有 续写 功能的构造方法, 不会清空文件 FileOutputStream(String name, boolean append): 通过文件路径创建流, true可以续写 FileOutputStream(File file, boolean append): 通过File对象创建流, true可以续写 换行符: Windows系统: "\r\n" Linux系统: "\n" MacOS系统: "\r" 字节输入流: 一次读取一个字节原理: C:/Users/win/AppData/Local/YNote/data/qq51705C22557BC4566B6FB12F9448BCB0/ab90326e7d45490fa723573579a5c6eb/clipboard.png
如何一次读取多个byte 一次读取多个byte是如何实现的, 相比于一次读取一个byte效率上哪个更高 补充: java.lang.String类: String(byte[] bytes): 使用平台默认字符集解码将byte数组转换为String String(byte[] bytes, int offset, int length): 使用平台默认字符集将数组一部分转换为String 总结: java.io.InputStream抽象类: 字节输入流 (顶层类) int read(byte[] b): 一次读一个字节数组 参数 byte[] b 作用: 存储每次读到的字节, 起到缓冲作用 返回值作用: 每次读到的字节个数, 读到文件末尾返回-1
// 示例代码 FileInputStream fis = new FileInputStream("模块名\\文件名"); byte[] bytes = new byte[1024]; // 定义字节数组, 用于保存每次读取到的数据 int len; // 定义int变量, 用于保存每次读取到的长度 while ((len = fis.read(bytes)) != -1) { String s = new String(bytes, 0, len); // 将读取到的字节转换为字符串, 读到多少个就转换多少个 System.out.print(s); } fis.close(); // 释放资源 C:/Users/win/AppData/Local/YNote/data/qq51705C22557BC4566B6FB12F9448BCB0/76f05812ef5b4885b93835544477710a/clipboard.png 字符输出流: Writer和FileWriter Writer类有哪些共性方法 FileWriter类可以做什么 创建FileWriter对象时有哪3个作用 java.io.Writer抽象类: 字符输出流 (顶层类) 'a''b' 缓冲区 97 98 // 常用成员方法 abstract void close(): 刷新缓冲区并释放资源 abstract void flush() :刷新缓冲区 // 写 void write(int c): 写一个字符 (int类型为了代码编写方便) void write(char[] cbuf): 写一个字符数组 abstract void write(char[] b, int off, int len): 写一个字符数组的一部分 void write(String str): 写一个字符串 void write(String str, int off, int len): 写一个字符串的一部分 注意: write()方法只是将数据写到内存缓冲区, 最后必须调用flush()或close()才能将数据真正写入磁盘 java.io.FileWriter类: 文件字符输出流 // 构造方法 FileWriter(File file): 通过File对象创建文件字符输出流 FileWriter(String fileName): 通过文件路径创建文件字符输出流 作用: 1. 创建FileWriter对象 2. 根据构造方法中的路径, 在磁盘上创建文件 ("如果文件已存在, 则清空文件内容") 3. 将FileWriter对象指向磁盘上的文件 字符输出流: flush与close区别 区别: flush(): 刷新缓冲区 (将数据从内存中写入到磁盘) close(): 刷新缓冲区, 并释放资源. 关闭流后不能再用同一个流对象操作 flush() 可以省略, 只用 close()来 刷新并释放资源 字符输出流: 其他方法 写的其他方法: void write(char[] cbuf): 写一个字符数组 abstract void write(char[] b, int off, int len): 写一个字符数组的一部分 void write(String str): 写一个字符串 void write(String str, int off, int len): 写一个字符串的一部分
Properties Properties存储数据和 Properties双列集合: 键和值都是 String 类型 java.util.Properties类: 属性集, 属于Map的双列集合, 继承自Hashtable // 构造方法 Properties(): 创建一个Properties集合 // 可以使用Map接口中的方法 // 特有成员方法 Object setProperty(String key, String value): 保存/替换键值对 String getProperty(String key): 通过键获取值. 键不存在返回null Set<String> stringPropertyNames(): 返回键的集合 void store(OutputStream out, String comments): 将集合用字节流写入文件(不能中文),并写入注释 void store(Writer writer, String comments): 将集合用字符流写入文件(可以中文),并写入注释 void load(InputStream inStream): 从配置文件中通过字节流加载数据到Properties集合(不能中文) void load(Reader reader): 从配置文件中通过字符流加载数据到Properties集合(可以中 |
|