java_IO流(输入流)

时间:2021-12-31 04:51:32
  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 }