Day23—IO流-1

📅 发布时间:2026/7/16 10:15:21 👁️ 浏览次数:
Day23—IO流-1
IO流存储和读取数据的解决方案Iinput OoutputIO流作用用于读写数据本地文件、网络IO的分类根据数据的流向分为输入流和输出流。输入流把数据从其他设备上读取到内存中的流。输出流把数据从内存中写出到其他设备上的流。格局数据的类型分为字节流和字符流。字节流以字节为单位读写数据的流。可以操作所有类型的文件。字符流以字符为单位读写数据的流。只能操作纯文本文件。字节流FileOutputStream操作本地文件的字节输出流可以把程序中的数据写到本地文件中。书写步骤①创建字节输出流对象参数是字符串表示的路径或者File对象都是可以的如果文件不存在会创建一个新的文件但是要保证父级路径是存在的如果文件已经存在则会清空文件②写数据write方法的参数是整数但实际上写道本地文件中的是整数在ASCII码上对应的字符③释放资源每次使用完流之后都要释放资源写数据的三种方式写数据的两个小问题换行再次写出一个换行符即可 /r或者/n续写打开续写开关在创建对象的第二个参数手动传递trueFileInputStream操作本地文件的字节输入流可以把本地文件中的数据读取到程序中来。书写步骤①创建字节输出流对象如果文件不存在就直接报错②写数据一次读一个字节读出来的是数据在ASCII上对应的数字读到文件末尾了read方法返回-1③释放资源每次使用完流之后都要释放资源循环读取public class FISRead { public static void main(String[] args) throws IOException{ // 使用文件名称创建流对象 FileInputStream fis new FileInputStream(read.txt); // 定义变量保存数据 int b // 循环读取 while ((b fis.read())!-1) { System.out.println((char)b); } // 关闭资源 fis.close(); } }一次读多个字节注意一次读一个字节数组的数据每次读取会尽可能把数组装满IO异常的处理使用try...catch...finally代码块处理异常部分字符集GBK一个英文字母一个字节二进制第一位是0一个中文汉字两个字节二进制第一位是1Unicode万国码英文字母1个字节中文3个字节编码、解码字符流字符流字节流字符集特点输入流一次读一个字节遇到中文时一次读多个字节输出流底层会把数据按照指定的编码方式进行编码变成字节再写到文件中使用场景对于纯文本文件进行读写操作FileReader①创建字符输入流对象如果文件不存在就直接报错②读取数据按字节进行读取遇到中文一次读多个字节读取后解码返回一个整数读到文件末尾了read方法返回-1③释放资源FileWriter构造方法成员方法书写细节①创建字符输出流对象参数是字符串表示的路径或者File对象都是可以的如果文件不存在会创建一个新的文件但是要保证父级路径是存在的如果文件已经存在则会清空文件如果不想清空可以打开续写开关②写数据如果write方法的参数是整数但实际上写道本地文件中的是整数在ASCII码上对应的字符③释放资源每次使用完流之后都要释放资源字符输入流原理解析①创建字符输入流对象底层关联文件并创建缓冲区长度为8192的字节数组)②读取数据底层1.判断缓冲区中是否有数据可以获取2.缓冲区没有数据就从文件中获取数据装到缓冲区中每次尽可能装满缓冲区如果文件中也没有数据了返回-13.缓冲区有数据就从缓冲区读取空参的read方法一次读取一个字节遇到中文一次读取多个字节把字节解码并转成十进制返回有参的read方法把读取字节解码强转三步合并了强转之后的字符放到数组中字符输出流原理解析flush和close方法