1.字节流 FileInputStream、FileOutputStream
①FileInputStream
1 importjava.io.FileInputStream;2
3 public classFileInputStreamDemo {4 public static void main(String[] args) throwsException {5 FileInputStream in = new FileInputStream("D:\\a.txt");6 //构建一个字节数组作为缓冲区
7 byte[] bs = new byte[10];8 //定义一个变量来记录读取的字节个数
9 int len = -1;10 while ((len = in.read(bs)) != -1) {11 System.out.println(new String(bs, 0, len, "utf-8"));12 }13 in.close();14 }15 }
②FileOutputStream
1 importjava.io.FileOutputStream;2
3 public classFileOutputStreamDemo {4 public static void main(String[] args) throwsException {5 //true是追加。不加true,或者是false会新建并覆盖已有的。
6 FileOutputStream out = new FileOutputStream("D:\\a.txt", false);7 //字节流身上没有缓冲区
8 out.write("缓冲区".getBytes("utf-8")); //utf-8编码
9 out.write("abc".getBytes());10 out.close();11 }12 }
关于流中的异常处理
1.将刘对象放在try之外声明并且赋值为null,放到try内初始化。
2.在关流之前需要判断流对象是否初始化成功(判断流对象是否为null)。
3.关流之后需要将流对象强制置为null,防止关流失败流对象依然占用文件。
4.需要在关流之前手动冲刷缓冲区以防关流失败导致一部分数据死在缓冲区中。
③用FileInputStream、FileOutputStream复制文件
1 importjava.io.FileInputStream;2 importjava.io.FileNotFoundException;3 importjava.io.FileOutputStream;4 importjava.io.IOException;5
6 public classCopyFileDemo {7 public static voidmain(String[] args) {8 FileInputStream in = null;9 FileOutputStream out = null;10 try{11 in = new FileInputStream("D:\\a.zip");12 out = new FileOutputStream("C:\\a.zip");13 //构建一个字节数组作为缓冲区
14 byte[] bs = new byte[1024 * 1024 * 10];15 //定义一个变量来记录每次读取的字节个数
16 int len = -1;17 while ((len = in.read(bs)) != -1) {18 out.write(bs, 0, len);19 }20 } catch(FileNotFoundException e) {21 e.printStackTrace();22 } catch(IOException e1){23 e1.printStackTrace();24 } finally{25 if(in != null){26 try{27 in.close();28 } catch(IOException e) {29 e.printStackTrace();30 } finally{31 in = null;32 }33 }34 if(out != null){35 try{36 out.close();37 } catch(IOException e) {38 e.printStackTrace();39 } finally{40 out = null;41 }42 }43 }44 }45 }
2.转换流 InputStreamReader、OutputStreamWriter
①InputStreamReader 将字节转化为字符的流
1 importjava.io.FileInputStream;2 importjava.io.InputStreamReader;3
4 public classInputStreamReaderDemo {5 public static void main(String[] args) throwsException {6 //底层靠的是FileInputStream7 //读取出来的是字节,但是展现的是字符---将字节转化为字符
8 InputStreamReader in = new InputStreamReader(new FileInputStream("D:\\test.txt"), "utf-8");9 char[] cs = new char[3];10 in.read(cs);11 in.close();12 System.out.println(cs);13 }14 }
②OutputStreamWriter 将字符转化为字节的流
1 importjava.io.FileOutputStream;2 importjava.io.IOException;3 importjava.io.OutputStreamWriter;4
5 public classOutputStreamWriterDemo {6 public static void main(String[] args) throwsIOException {7 //OutputStreamWriter将字符转化为字节的流8 //实际上是用FileOutputStream来写出数据9 //传入的参数是字符形式,但是最后以字节形式向外写出---字符转字节