1 * 字节输入流(InputStream):所有字节输入流的父类 2 * 所有子类共性方法: 3 * int read():从输入流中读取数据的下一个字节 4 * int read(byte[] b):从输入流中拂去一定数量的字节,并将其存储在缓冲区数组b中 5 * void close() 关闭 此输入流并释放该流 关联的所有系统资源 6 * java.io.FileInputStream extends InputStream 7 * FileInputStream:文件字节输入流 8 * 作用:把硬盘文件中的数据,读取到内存中使用 9 * 10 * 构造方法: 11 * FileInputStream(String name): 12 * FileInputStream(File file): 13 * 参数:读取文件的数据源 14 * String name:文件路径 15 * File file:文件 16 * 构造方法的作用: 17 * 1.会创建一个FileInputStream对象 18 * 2.会把FileInputStream对象指定构造方法中要读取的文件 19 * 读取数据的原理(硬盘-->内存): 20 * java程序-->os-->os读取数据的方法-->读取文件 21 * 22 * 字节输入流的使用步骤(重点): 23 * 1.创建FileInputStream对象,构造方法中绑定要读取的数据源 24 * 2.使用FileInputStream对象中的方法read读取文件 25 * 3.释放资源 26 * 27 * 字节流练习(文件复制): 28 * 29 * 30 * 31 */ 32 public static void main(String[] args) throws IOException { 33 //1.创建输入流 34 FileInputStream fis = new FileInputStream("D:\\1.jpg"); 35 //2.创建输出流 36 FileOutputStream fos = new FileOutputStream("E:\\1.jpg"); 37 //3.边读边写 38 int len = 0; 39 while((len = fis.read())!=-1){ 40 //3.1写入 41 System.out.println(len); 42 } 43 //先关闭写,再关闭读 44 fos.close(); 45 fis.close(); 46 } 47 /** 48 * 字符流: 49 * 字符输入流:java.io.Reader,字符输入流的最顶层的父类,定义了共性成员方法,是抽象类 50 * 共性成员方法: 51 * int read():读取当个字符 52 * int read(char[] cbuf):一次性读取多个字符,将字符读入数组 53 * void close() 关闭该流并释放与关联的所有资源 54 * 55 * java.io.FileReader extends InptStreamReader extends Reader 56 * FileReader:文件字符输入流 57 * 作用:把硬盘文件中的数据以字符的方式读取到内存中 58 * 构造方法: 59 * FileReader(String fileName): 60 * FileReader(File file): 61 * 参数: 62 * String fileName:文件路径 63 * File file:文件 64 * FileReader构造方法的作用: 65 * 1.创建一个FileReader对象 66 * 2.会把FileReader对象指向我们要读取的文件 67 * 字符输入流步骤: 68 * 1.创建FileReader对象,构造方法中邦绑定要读取的数据源 69 * 2.使用FileReader对象中的方法read读取文件 70 * 3.释放资源 71 * 字符输出流: 72 * java.io.Writer:所有字符输出流的父类 73 * 共性成员方法: 74 * void write(int c):写入单个字符 75 * void write(char[] cbuf):写入字符数组 76 * abstract void write(char[] cbuf,int off,int len):写入字符数组的某一部分,off数组的开始索引,len写的字符个数 77 * void write(String str):写入字符串 78 * void write(String str,int off,int len):写入字符串中的某一部分,off开始位置,len写的个数 79 * void flush():刷新该流的缓冲 80 * void close():关闭此流,但要先刷新它 81 * 82 * java.io.FileWriter extends OutputStreamWrite extends Writer 83 * FileWriter:文件字符输出流: 84 * 作用:把内存中字符数组写入到文件中 85 * 构造方法: 86 * FileWriter(File file):根据给定的File对象构造一个FileWriter对象 87 * FileWriter(String fileName):根据给定的文件名构造一个FileWriter对象 88 * 参数:写入数据的目的地 89 * String FileName:文件的路径 90 * File file:文件 91 * 构造方法的作用: 92 * 1.会创建FileWriter对象 93 * 2.会根据构造方法中传递的文件/文件路径创建文件 94 * 3.会把FileWriter对象指向建好的文件 95 * 字符输出流的使用步骤(重点): 96 * 1.创建FileWriter对象,构造方法中绑定要写入数据的目的地 97 * 2.使用FileWriter中的write把数据写入到内存缓冲区中(字符转换为字节的过程) 98 * 3.使用FileWriter中的方法flush把内存缓冲去中的数据刷新到文件中 99 * 4.释放资源(会先把内存缓冲区中的数据刷新到文件中) 100 * 写数据的其他方法: 101 * void write(char[] cbar):写入字符数组 102 * abstract void write(char[] cbuf,int off,int len):写入字符串数组的某一部分,off开始,len个数 103 * void write(String str):写入字符串 104 * void write(String str,int off,int len):写入字符串的某一部分,off字符串的开始索引,len写的字符个数 105 * 续写和换行: 106 * 续写:使用两个参数的构造方法FileWriter(String fileName, boolean append) 107 * 换行: 108 * windows:\r\n 109 * linux:/n 110 * mac:/r 111 * 112 * JDK1.7前:使用try catch finally 处理流中的异常 113 * 格式: 114 * try{ 115 * 可能出现异常代码 116 * }catch{ 117 * 异常的处理逻辑 118 * }finally{ 119 * 一定会执行代码 120 * } 121 * JDK7的新特性: 122 * 在try的后边可以增加一个(),在括号中可以定义流对象 123 * 那么这个流对象的作用域就在try中有效 124 * try中的代码执行完毕自动把流对象释放,不用finally 125 * 格式: 126 * try(定义流对象,可以定义多个){ 127 * 可能出现异常代码 128 * }catch(异常类变量 变量名){ 129 * 异常的处理逻辑 130 * } 131 * 132 * JDK9的新特性: 133 * try的前边可以定义流对象 134 * 在try后边()中可以直接引入流对象的名称(变量名) 135 * 在try代码执行完毕后,流对象也可以释放,不用写finally 136 * 格式: 137 * A a = new a(); 138 * B b = new b(); 139 * try(a;b){ 140 * 可能出现异常代码 141 * }catch{ 142 * 处理方式 143 * } 144 * 145 */ 146 }