2026/2/17 11:42:21
网站建设
项目流程
网站 宽屏窄屏自适应,seo关键词排名优化公司,wordpress破解主题商务,郑州电力高等专科学校校长Java进阶#xff1a;IO第一章 Java 中 IO
Java 中 IO 流分为几种
按照流的流向分#xff0c;可以分为输入流和输出流#xff1b;按照操作单元划分#xff0c;可以划分为字节流和字符流#xff1b;按照流的角色划分为节点流和处理流。
Java Io 流共涉及 40 多个类#xff…Java进阶IO第一章 Java 中 IOJava 中 IO 流分为几种按照流的流向分可以分为输入流和输出流按照操作单元划分可以划分为字节流和字符流按照流的角色划分为节点流和处理流。Java Io 流共涉及 40 多个类这些类看上去很杂乱但实际上很有规则而且彼此之间存在非常紧密的联系 Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。InputStream/Reader: 所有的输入流的基类前者是字节输入流后者是字符输入流。OutputStream/Writer: 所有输出流的基类前者是字节输出流后者是字符输出流。注意事项utf8编码一个中文占3个字节,gbk编码一个中文占2个字节如果存储和解析的编码不一致就会乱码idea默认编码是utf8第二章 字节流知识点-- 字节输出流【OutputStream】OutputStream类的概述java.io.OutputStream抽象类是表示字节输出流的所有类的超类将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。OutputStream类的常用方法public void close()关闭此输出流并释放与此流相关联的任何系统资源。public void write(byte[] b)将 b.length字节从指定的字节数组写入此输出流。public void write(byte[] b, int off, int len)从指定的字节数组写入 len字节从偏移量 off开始输出到此输出流。public abstract void write(int b)将指定的字节输出流。小贴士close方法当完成流的操作时必须调用此方法释放系统资源。FileOutputStream类FileOutputStream类的概述java.io.FileOutputStream类是OutputStream类的子类,用来表示是文件输出流用于将数据写出到文件。FileOutputStream类的构造方法public FileOutputStream(File file)创建文件输出流以写入由指定的 File对象表示的文件。public FileOutputStream(String name) 创建文件输出流以指定的名称写入文件。当你创建一个流对象时必须传入一个文件路径。该路径下如果没有这个文件会创建该文件。如果有这个文件会清空这个文件的数据。构造举例代码如下package com.itheima.demo13_FileOutputStream类;import java.io.File;import java.io.FileOutputStream;/**AuthorpengzhilinDate: 2020/9/20 14:46/public class Test1_概述和构造方法 {public static void main(String[] args) throws Exception{/FileOutputStream类:概述:java.io.FileOutputStream类是OutputStream类的子类,表示字节输出流,用来写出字节数据构造方法:- public FileOutputStream(File file)创建文件输出流以写入由指定的 File对象表示的文件。- public FileOutputStream(String name) 创建文件输出流以指定的名称写入文件。注意:1.当你创建一个字节输出流对象时必须传入一个文件路径。2.该路径下如果没有这个文件会创建该文件(空的)。3.如果有这个文件会清空这个文件的数据。*/// 1.创建字节输出流对象,关联day12bba.txt文件FileOutputStream fos1 new FileOutputStream(“day12\bbb\a.txt”);// 2.创建字节输出流对象,关联day12bb.txt文件 FileOutputStream fos2 new FileOutputStream(day12\bbb\b.txt); // 3.创建字节输出流对象,关联day12bbc.txt文件 FileOutputStream fos3 new FileOutputStream(new File(day12\bbb\c.txt));}}FileOutputStream类的写出数据写出字节write(int b)方法每次可以写出一个字节数据代码使用演示public class Test2_写出单个字节数据 {public static void main(String[] args) throws Exception{/*FileOutputStream类的写出数据:- public abstract void write(int b) 将指定的字节写入输出流。- public void close() 关闭此输出流并释放与此流相关联的任何系统资源。*/// 创建字节输出流对象,关联目的地文件路径FileOutputStream fos new FileOutputStream(“day12\bbb\a.txt”);// 写出单个字节数据 fos.write(97); fos.write(98); fos.write(99); // 关闭流,释放资源 fos.close(); }}小贴士虽然参数为int类型四个字节但是只会保留一个字节的信息写出。流操作完毕后必须释放系统资源调用close方法千万记得。写出字节数组write(byte[] b)每次可以写出数组中的数据代码使用演示public class Test3_写出字节数组数据 {public static void main(String[] args) throws Exception{/*FileOutputStream类的写出数据:- public void write(byte[] b)将 b.length字节从指定的字节数组写入此输出流。- public void close() 关闭此输出流并释放与此流相关联的任何系统资源。*/// 创建字节输出流,关联目的地文件路径FileOutputStream fos new FileOutputStream(“day12\bbb\b.txt”);// 创建字节数组,并存储字节数据byte[] bys {97,98,99,100};// 写出该字节数组中的字节数据fos.write(bys);// 关闭流,释放资源fos.close();}}写出指定长度字节数组write(byte[] b, int off, int len),每次写出从off索引开始len个字节代码使用演示public class Test4_写出指定范围字节数组数据 {public static void main(String[] args) throws Exception{/*FileOutputStream类的写出数据:- public void write(byte[] b, int off, int len) 写指定范围的字节数组的字节数据到输出流。- public void close() 关闭此输出流并释放与此流相关联的任何系统资源。*/// 创建字节输出流对象,关联目的地文件路径FileOutputStream fos new FileOutputStream(“day12\bbb\c.txt”);// 创建字节数组,存储字节数据 byte[] bys {97,98,99,100}; // 写出指定范围字节数组中的字节数据 fos.write(bys, 1,2 ); // 关闭流,释放资源 fos.close(); }}数据追加续写经过以上的演示每次程序运行创建输出流对象都会清空目标文件中的数据。如何保留目标文件中数据还能继续添加新数据呢public FileOutputStream(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。public FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件。这两个构造方法参数中都需要传入一个boolean类型的值true表示追加数据false表示清空原有数据。这样创建的输出流对象就可以指定是否追加续写了代码使用演示public class Test5_数据追加续写 { public static void main(String[] args) throws Exception{ /* 数据追加续写: - public FileOutputStream(File file, boolean append) 创建文件输出流以写入由指定的 File对象表示的文件。 - public FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件。 参数append: 如果是true,就表示追加续写(不清空),如果是false,就清空原文件中的数据 注意: 1.当你创建一个字节输出流对象时必须传入一个文件路径。 2.该路径下如果没有这个文件会创建该文件(空的)。 3.如果有这个文件并且第二个参数为true,就不清空,如果第二个参数为false,就清空 */ // 创建字节输出流对象,关联目的地文件路径(day12bba.txt) FileOutputStream fos new FileOutputStream(day12\bbb\a.txt,true); // 写出数据 fos.write(97); // 关闭流,释放资源 fos.close(); } }写出换行Windows系统里换行符号是 。把以指定是否追加续写了代码使用演示public class FOSWrite { public static void main(String[] args) throws IOException { // 需求: 把这首诗写入day15\aaa\d.txt文件中 // String类 byte[] getBytes();把一个字符串转换为一个字节数组 // 创建字节输出流对象,关联目的地文件路径 FileOutputStream fos new FileOutputStream(day15\aaa\d.txt); // 写出数据 fos.write(吟诗一首.getBytes()); fos.write( .getBytes()); fos.write(看这风景美如画.getBytes()); fos.write( .getBytes()); fos.write(吟诗一首赠天下.getBytes()); fos.write( .getBytes()); fos.write(奈何本人没文化.getBytes()); fos.write( .getBytes()); fos.write(只能卧槽浪好大.getBytes()); // 关闭流,释放资源 fos.close(); } }回车符 和换行符 回车符回到一行的开头return。换行符下一行newline。系统中的换行Windows系统里每行结尾是回车换行即 Unix系统里每行结尾只有换行即 Mac系统里每行结尾是回车即 。从 Mac OS X开始与Linux统一。字节输入流【InputStream】InputStream类的概述java.io.InputStream抽象类是表示字节输入流的所有类的超类可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。InputStream类的常用方法public void close()关闭此输入流并释放与此流相关联的任何系统资源。public abstract int read() 从输入流读取数据的下一个字节。public int read(byte[] b) 从输入流中读取一些字节数并将它们存储到字节数组 b中 。close方法当完成流的操作时必须调用此方法释放系统资源。FileInputStream类FileInputStream类的概述java.io.FileInputStream类是InputStream类的子类 , 用来表示文件输入流从文件中读取字节。FileInputStream类的构造方法FileInputStream(File file) 通过打开与实际文件的连接来创建一个 FileInputStream 该文件由文件系统中的文件对象 file命名。FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream 该文件由文件系统中的路径名 name命名。当你创建一个输入流对象时必须传入一个文件路径。该路径下如果没有该文件,会抛出FileNotFoundException构造举例代码如下public class Test1_概述和构造方法 {public static void main(String[] args) throws Exception{// 文件存在:// 创建字节输入流对象,关联数据源文件路径FileInputStream fis1 new FileInputStream(“day12\ccc\a.txt”);FileInputStream fis2 new FileInputStream(new File(“day12\ccc\a.txt”));// 文件不存在: FileInputStream fis3 new FileInputStream(day12\ccc\b.txt);// 运行报文件找不到异常FileNotFoundException }}FileInputStream类的读取数据读取字节read方法每次可以读取一个字节的数据提升为int类型读取到文件末尾返回-1代码使用演示public class FISRead {public static void main(String[] args) throws IOException{// 使用文件名称创建流对象FileInputStream fis new FileInputStream(“read.txt”);// 读取数据返回一个字节int read fis.read();System.out.println((char) read);read fis.read();System.out.println((char) read);read fis.read();System.out.println((char) read);read fis.read();System.out.println((char) read);read fis.read();System.out.println((char) read);// 读取到末尾,返回-1read fis.read();System.out.println( read);// 关闭资源fis.close();}}输出结果abcde-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(); } } 输出结果 a b c d e小贴士虽然读取了一个字节但是会自动提升为int类型。流操作完毕后必须释放系统资源调用close方法千万记得。使用字节数组读取read(byte[] b)每次读取b的长度个字节到数组中返回读取到的有效字节个数读取到末尾时返回-1代码使用演示public class Test3_读取字节数组长度个字节数据 {public static void main(String[] args) throws Exception{/*FileInputStream类读取数据:- public int read(byte[] b) 从输入流中读取一些字节数据并将它们存储到字节数组 b中,返回的是读取到的字节个数。*/// 创建字节输入流对象,关联数据源文件路径FileInputStream fis new FileInputStream(“day12\ccc\b.txt”);// 创建一个长度为2的字节数组,用来存储读取到的字节数据 byte[] bys new byte[2]; // 读取字节数据 int len1 fis.read(bys); System.out.println(bys数组转换为字符串:new String(bys,0,len1));// ab System.out.println(len1);// 2 int len2 fis.read(bys); System.out.println(bys数组转换为字符串:new String(bys,0,len2));// cd System.out.println(len2);// 2 int len3 fis.read(bys); System.out.println(bys数组转换为字符串:new String(bys,0,len3));// e System.out.println(len3);// 1 int len4 fis.read(bys); //System.out.println(bys数组转换为字符串:new String(bys));// ed System.out.println(len4);// -1 // 关闭流,释放资源 fis.close(); }}循环读取代码使用演示public class Test3_读取字节数组长度个字节数据 { public static void main(String[] args) throws Exception{ /* FileInputStream类读取数据: - public int read(byte[] b) 从输入流中读取一些字节数据并将它们存储到字节数组 b中,返回的是读取到的字节个数。 */ // 创建字节输入流对象,关联数据源文件路径 FileInputStream fis new FileInputStream(day12\ccc\b.txt); // 创建一个长度为2的字节数组,用来存储读取到的字节数据 byte[] bys new byte[2]; // 读取字节数据 // 定义一个int类型的变量,用来存储读取到的有效字节个数 int len; while ((len fis.read(bys)) ! -1){ System.out.println(new String(bys,0,len)); } // 关闭流,释放资源 fis.close(); } }小贴士使用数组读取每次读取多个字节减少了系统间的IO操作次数从而提高了读写的效率建议开发中使用。实操-- 字节流练习图片复制需求使用字节流拷贝一张图片分析[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h4gi0czN-1665056325581)(img 88696319583.png)]一次读写一个字节拷贝文件思路: 1.创建字节输入流对象,关联数据源文件路径 2.创建字节输出流对象,关联目的地文件路径 3.定义一个变量,用来存储读取到的字节数据 4.循环读取 5.在循环中,写出数据 6.关闭流,释放资源 一次读写一个字节数组拷贝文件 1.创建字节输入流对象,关联数据源文件路径 2.创建字节输出流对象,关联目的地文件路径 3.定义一个字节数组,用来存储读取到的字节数据 3.定义一个变量,用来存储读取到的字节个数 4.循环读取 5.在循环中,写出数据 6.关闭流,释放资源实现复制图片文件代码使用演示package com.itheima.demo16_字节流练习图片复制; import java.io.FileInputStream; import java.io.FileOutputStream; /** * Authorpengzhilin * Date: 2020/9/20 16:27 */ public class Test { public static void main(String[] args) throws Exception{ /* 练习:字节流练习图片复制 一次读写一个字节拷贝文件: 1.创建字节输入流对象,关联数据源文件路径 2.创建字节输出流对象,关联目的地文件路径 3.定义一个变量用来存储读取到的字节数据 4.循环读取 5.在循环中,写出数据 6.关闭流,释放资源 一次读写一个字节数组拷贝文件: 1.创建字节输入流对象,关联数据源文件路径 2.创建字节输出流对象,关联目的地文件路径 3.定义一个字节数组,用来存储读取到的字节数据 3.定义一个变量用来存储读取到的字节个数 4.循环读取 5.在循环中,写出数据 6.关闭流,释放资源 */ //一次读写一个字节拷贝文件: /* // 1.创建字节输入流对象,关联数据源文件路径 FileInputStream fis new FileInputStream(day12\aaa\hb.jpg); // 2.创建字节输出流对象,关联目的地文件路径 FileOutputStream fos new FileOutputStream(day12\ccc\hbCopy1.jpg); // 3.定义一个变量用来存储读取到的字节数据 int len; // 4.循环读取 while ((len fis.read()) ! -1) { // 5.在循环中,写出数据 fos.write(len); } // 6.关闭流,释放资源 fos.close(); fis.close();*/ // 一次读写一个字节数组拷贝文件: // 1.创建字节输入流对象,关联数据源文件路径 FileInputStream fis new FileInputStream(day12\aaa\hb.jpg); // 2.创建字节输出流对象,关联目的地文件路径 FileOutputStream fos new FileOutputStream(day12\ccc\hbCopy2.jpg); // 3.定义一个字节数组,用来存储读取到的字节数据 byte[] bys new byte[8192]; // 3.定义一个int变量,用来存储读取到的字节个数 int len; // 4.循环读取 while ((len fis.read(bys)) ! -1) { // 5.在循环中,写出数据 fos.write(bys,0,len); } // 6.关闭流,释放资源 fos.close(); fis.close(); } }小贴士流的关闭原则先开后关后开先关。第三章 字符流当使用字节流读取文本文件时可能会有一个小问题。就是遇到中文字符时可能不会显示完整的字符那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类以字符为单位读写数据专门用于处理文本文件。package com.itheima.demo17_字节流操作文本文件可能存在问题; import java.io.FileInputStream; /** * Authorpengzhilin * Date: 2020/9/20 16:53 */ public class Test { public static void main(String[] args) throws Exception{ // 需求:使用字节流读取出a.txt文件中的每个字符数据并打印到控制台 // 1.创建字节输入流对象,关联数据源文件路径 FileInputStream fis new FileInputStream(day12\ddd\a.txt); // 2.定义一个int变量,用来存储读取到的字节数据 int len; // 3.循环读取 while ((len fis.read()) ! -1){ System.out.println((char)len); } // 4.释放资源 fis.close(); } }字符输入流【Reader】字符输入流Reader类的概述java.io.Reader抽象类是表示用于读取字符流的所有类的超类可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。字符输入流Reader类的常用方法public void close()关闭此流并释放与此流相关联的任何系统资源。public int read() 从输入流读取一个字符。public int read(char[] cbuf) 从输入流中读取一些字符并将它们存储到字符数组 cbuf中FileReader类FileReader类的概述java.io.FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。FileReader类的构造方法FileReader(File file) 创建一个新的 FileReader 给定要读取的File对象。FileReader(String fileName) 创建一个新的 FileReader 给定要读取的文件的名称。当你创建一个流对象时必须传入一个文件路径。类似于FileInputStream 。构造举例代码如下public class Test1_概述和构造方法 {public static void main(String[] args) throws Exception{/*概述:java.io.FileReader类继承Reader类,表示字符输入流,用来读取字符数据构造方法:- FileReader(File file) 创建一个新的 FileReader 给定要读取的File对象。- FileReader(String fileName) 创建一个新的 FileReader 给定要读取的文件的名称。注意:1.当你创建一个输入流对象时必须传入一个文件路径。2.该路径下如果没有该文件,会抛出FileNotFoundException*/// 文件存在:// 创建字符输入流对象,关联数据源文件路径FileReader fr1 new FileReader(“day12\ddd\a.txt”);FileReader fr2 new FileReader(new File(“day12\ddd\a.txt”));// 文件不存在: FileReader fr3 new FileReader(day12\ddd\b.txt);// 报文件找不到异常 }}FileReader类读取数据读取字符read方法每次可以读取一个字符的数据提升为int类型读取到文件末尾返回-1循环读取代码使用演示public class FRRead {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileReader fr new FileReader(“read.txt”);// 定义变量保存数据int b // 循环读取while ((b fr.read())!-1) {System.out.println((char)b);}// 关闭资源fr.close();}}输出结果黑马程序员小贴士虽然读取了一个字符但是会自动提升为int类型。使用字符数组读取read(char[] cbuf)每次读取多个字符到数组中返回读取到的有效字符个数读取到末尾时返回-1代码使用演示public class FRRead {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileReader fr new FileReader(“read.txt”);// 定义变量保存有效字符个数int len // 定义字符数组作为装字符数据的容器char[] cbuf new char[2];// 循环读取while ((len fr.read(cbuf))!-1) {System.out.println(new String(cbuf));}// 关闭资源fr.close();}}输出结果黑马程序员序获取有效的字符改进代码使用演示public class FISRead { public static void main(String[] args) throws IOException { // 使用文件名称创建流对象 FileReader fr new FileReader(read.txt); // 定义变量保存有效字符个数 int len // 定义字符数组作为装字符数据的容器 char[] cbuf new char[2]; // 循环读取 while ((len fr.read(cbuf))!-1) { System.out.println(new String(cbuf,0,len)); } // 关闭资源 fr.close(); } } 输出结果 黑马 程序 员字符输出流【Writer】字符输出流Writer类的概述java.io.Writer抽象类是表示用于写出字符流的所有类的超类将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。字符输出流Writer类的常用方法public abstract void close()关闭此输出流并释放与此流相关联的任何系统资源。public abstract void flush()刷新此输出流并强制任何缓冲的输出字符被写出。public void write(int c)写出一个字符。public void write(char[] cbuf)将 b.length字符从指定的字符数组写出此输出流。public abstract void write(char[] b, int off, int len)从指定的字符数组写出 len字符从偏移量 off开始输出到此输出流。public void write(String str)写出一个字符串。public void write(String str,int off,int len)写出一个字符串的一部分。–FileWriter类FileWriter类的概述java.io.FileWriter类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。FileWriter类的构造方法FileWriter(File file) 创建一个新的 FileWriter给定要读取的File对象。FileWriter(String fileName) 创建一个新的 FileWriter给定要读取的文件的名称。FileWriter(File file,boolean append) 创建一个新的 FileWriter给定要读取的File对象。FileWriter(String fileName,boolean append) 创建一个新的 FileWriter给定要读取的文件的名称。当你创建一个流对象时必须传入一个文件路径类似于FileOutputStream。构造举例代码如下public class Test1_概述和构造方法 {public static void main(String[] args) throws Exception{/*概述:java.io.FileWriter是Writer的子类,表示字符输出流,可以用来写出字符数据构造方法:- FileWriter(File file) 创建一个新的 FileWriter给定要读取的File对象。- FileWriter(String fileName) 创建一个新的 FileWriter给定要读取的文件的名称。- FileWriter(File file,boolean append) 创建一个新的 FileWriter给定要读取的File对象。- FileWriter(String fileName,boolean append) 创建一个新的 FileWriter给定要读取的文件的名称。注意:1.当你创建一个字符输出流对象时必须传入一个文件路径。2.前面2个构造方法,传入的路径如果没有这个文件会创建该文件(空的),如果有这个文件,就会清空。3.后面2个构造方法,传入的路径, 如果没有这个文件会创建该文件(空的),如果有这个文件并且第二个参数为true,就不清空,如果第二个参数为false,就清空*/// 文件存在FileWriter fw1 new FileWriter(“day12\ddd\b.txt”,true);// 文件不存在 FileWriter fw2 new FileWriter(day12\ddd\c.txt); }}FileWriter类写出数据写出字符write(int b)方法每次可以写出一个字符数据代码使用演示public class Test2_写单个字符 { public static void main(String[] args) throws Exception{ /* - public void write(int c) 写出一个字符。 */ // 创建字符输出流对象,关联目的地文件路径 FileWriter fw new FileWriter(day12\ddd\d.txt); // 写出单个字符 fw.write(a); fw.write(b); // 关闭流,释放资源 fw.close(); } }小贴士虽然参数为int类型四个字节但是只会保留一个字符的信息写出。未调用close方法数据只是保存到了缓冲区并未写出到文件中。写出字符数组write(char[] cbuf)和write(char[] cbuf, int off, int len)每次可以写出字符数组中的数据用法类似FileOutputStream代码使用演示public class FWWrite {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileWriter fw new FileWriter(“fw.txt”);// 字符串转换为字节数组char[] chars “黑马程序员”.toCharArray();// 写出字符数组 fw.write(chars); // 黑马程序员 // 写出从索引2开始2个字节。索引2是程两个字节也就是程序。 fw.write(b,2,2); // 程序 // 关闭资源 fos.close(); }}写出字符串write(String str)和write(String str, int off, int len)每次可以写出字符串中的数据更为方便代码使用演示public class FWWrite {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileWriter fw new FileWriter(“fw.txt”);// 字符串String msg “黑马程序员”;// 写出字符数组 fw.write(msg); //黑马程序员 // 写出从索引2开始2个字节。索引2是程两个字节也就是程序。 fw.write(msg,2,2); // 程序 // 关闭资源 fos.close(); }}续写和换行操作类似于FileOutputStream。public class FWWrite {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象可以续写数据FileWriter fw new FileWriter(“fw.txt”true);// 写出字符串fw.write(“黑马”);// 写出换行fw.write();// 写出字符串fw.write(“程序员”);// 关闭资源fw.close();}}输出结果:黑马程序员小贴士字符流只能操作文本文件不能操作图片视频等非文本文件。当我们单纯读或者写文本文件时 使用字符流 其他情况使用字节流关闭和刷新因为内置缓冲区的原因如果不关闭输出流无法写出字符到文件中。但是关闭的流对象是无法继续写出数据的。如果我们既想写出数据又想继续使用流就需要flush方法了。flush刷新缓冲区流对象可以继续使用。close关闭流释放系统资源。关闭前会刷新缓冲区。代码使用演示public class FWWrite { public static void main(String[] args) throws IOException { // 使用文件名称创建流对象 FileWriter fw new FileWriter(fw.txt); // 写出数据通过flush fw.write(刷); // 写出第1个字符 fw.flush(); fw.write(新); // 继续写出第2个字符写出成功 fw.flush(); // 写出数据通过close fw.write(关); // 写出第1个字符 fw.close(); fw.write(闭); // 继续写出第2个字符,【报错】java.io.IOException: Stream closed fw.close(); } }小贴士即便是flush方法写出了数据操作的最后还是要调用close方法释放系统资源。总结必须练习: 1.字节流一次读写一个字节拷贝文件 2.字节流一次读写一个字节数组拷贝文件 3.字符流一次读写一个字符拷贝文件 4.字符流一次读写一个字符数组拷贝文件 注意:字节流可以拷贝一切文件,字符流只能拷贝文本文件 5.查找某个文件夹中指定类型的文件---递归 6.多分析递归程序的执行---写 有能力: 1.统计一个非空文件夹的字节大小 2.删除非空文件夹 - 能够说出File对象的创建方式 public File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 public File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。 public File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。 注意;路径不存在,不会影响File对象的创建 - 能够使用File类常用方法 public String getAbsolutePath() 返回此File的绝对路径名字符串。 public String getPath() 将此File转换为路径名字符串。获取构造路径(构造方法中传入的路径) public String getName() 返回由此File表示的文件或目录的名称。 public long length() 返回由此File表示的文件的字节大小。 不能获取目录的字节大小。 public boolean exists() 此File表示的文件或目录是否实际存在。 public boolean isDirectory() 此File表示的是否为目录。 public boolean isFile() 此File表示的是否为文件。 public boolean createNewFile() 当且仅当具有该名称的文件尚不存在时创建一个新的空文件。 public boolean mkdir() 创建由此File表示的目录。 public boolean mkdirs() 创建由此File表示的目录包括任何必需但不存在的父目录。 public boolean delete() 删除由此File表示的文件或目录。只能删除文件或者空文件夹,不能删除非空文件夹 - 能够辨别相对路径和绝对路径 绝对路径从盘符开始的路径这是一个完整的路径。 相对路径相对于项目目录的路径这是一个便捷的路径开发中经常使用。 掌握 - 能够遍历文件夹 public String[] list() 返回一个String数组表示该File目录中的所有子文件或子目录的名称。 public File[] listFiles() 返回一个File数组表示该File目录中的所有的子文件或子目录的路径。 - 能够解释递归的含义 方法自己调用字节 - 能够使用递归的方式计算5的阶乘 略 - 能够说出使用递归会内存溢出隐患的原因 递归没有出口或者出口太晚了,造成栈内存异常 因为方法调用就会在栈区开辟空间 - 能够说出IO流的分类和功能 字节流:以字节为基本单位进行读写数据 字节输入流: 以字节为基本单位进行读数据 字节输出流: 以字节为基本单位进行写数据 字符流:以字符为基本单位进行读写数据 字符输入流:以字符为基本单位进行读数据 字符输出流:以字符为基本单位进行写数据 - 能够使用字节输出流写出数据到文件 public void close() 关闭此输出流并释放与此流相关联的任何系统资源。 public abstract void write(int b) 将指定的字节写入输出流。 public void write(byte[] b)将 b.length字节从指定的字节数组写入此输出流。 public void write(byte[] b, int off, int len) 写指定范围的字节数组的字节数据到输出流。 - 能够使用字节输入流读取数据到程序 public abstract int read() 从输入流读取数据的下一个字节。 读一个字节 public int read(byte[] b) 从输入流中读取一些字节数并将它们存储到字节数组 b中 。 public void close() :关闭此输入流并释放与此流相关联的任何系统资源。 - 能够理解读取数据read(byte[])方法的原理 读取字节数组长度个字节数据放入该字节数组中,返回读取到的有效字节个数 - 能够使用字节流完成文件的复制 IO流核心步骤: 一次读写一个字节拷贝文件: 1.创建字节输入流对象,关联数据源文件路径 2.创建字节输出流对象,关联目的地文件路径 3.定义一个变量用来存储读取到的字节数据 4.循环读取 5.在循环中,写出数据 6.关闭流,释放资源 一次读写一个字节数组拷贝文件: 1.创建字节输入流对象,关联数据源文件路径 2.创建字节输出流对象,关联目的地文件路径 3.定义一个字节数组,用来存储读取到的字节数据 3.定义一个变量用来存储读取到的字节个数 4.循环读取 5.在循环中,写出数据 6.关闭流,释放资源 - 能够使用FileWriter写数据的5个方法 - public void write(int c) 写出一个字符。 - public void write(char[] cbuf)将 b.length字符从指定的字符数组写出此输出流。 - public abstract void write(char[] b, int off, int len) 从指定的字符数组写出 len字符从偏移量 off开始输出到此输出流。 - public void write(String str) 写出一个字符串。 - public void write(String str,int off,int len) 写出一个字符串的一部分。 - 能够说出FileWriter中关闭和刷新方法的区别 - public abstract void close() 关闭此输出流并释放与此流相关联的任何系统资源。 - public abstract void flush() 刷新此输出流并强制任何缓冲的输出字符被写出。 flush 刷新缓冲区流对象可以继续使用。 close 关闭流释放系统资源。关闭前会刷新缓冲区,但关闭后流不能再使用了。 - 能够使用FileWriter写数据实现换行和追加写 public FileWriter(String path,boolean append); public FileWriter(File path,boolean append); - 能够使用FileReader读数据一次一个字符 public int read() 从输入流读取一个字符,读取到末尾返回-1 - 能够使用FileReader读数据一次一个字符数组 public int read(char[] cbuf) 从输入流中读取一些字符并将它们存储到字符数组 cbuf中,读取到末尾返回-1