字符流基本操作
------- android培训、java培训、期待与您交流! ----------
IO(input Output)流
1.用来处理设备之间的数据传输
2.java对数据的操作是通过流的方式
3.java用于操作流的对象都在IO包中
4.流按操作数据分为两种:字节流与字符流
5.流按流向分为:输入流,输出流
IO流常用基类
字节流的抽象类:
InputStream, outputStream
字符流的抽象基类:
Reader,Writer
注:这四个类派生出来的子类名称都是以父类名作为子类名的后缀。
如:InputStream的子类FileInputStream
如:Reader的子类FileReader
注意:
/演示对已有文件的数据续写/
在window软件回车符,回车符用两个字符表示\r\n
linux用\n表示回车符
代码习题:
package com.day17.wd; import java.io.FileNotFoundException;
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class WriterDemo { /** * @param args * @throws IOException */ public static void main(String[] args) { // TODO Auto-generated method stub } private static void method_05() { FileReader fr=null; try { fr = new FileReader("d.txt"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { char [] ch=new char[3]; int num=0; int s=0; while((num=fr.read(ch))!=-1){ System.out.println("s--->"+s+",num---"+num); s++; System.out.println(new String(ch,0,num)); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { if(fr!=null) fr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* * 思考:read(char[]) * 当读取到末尾时,返回-1 * FileReader fr=new FileReader("d.txt"); char [] buf=new char[3]; int num=fr.read(buf); System.out.println(new String(buf,0,num)); int num1=fr.read(buf); System.out.println("num1--->"+num1); System.out.println(new String(buf,0,num)); int num2=fr.read(buf); System.out.println("num2-->"+num2); System.out.println(new String(buf,0,num2)); int num3=fr.read(buf); System.out.println("num3-->"+num3); System.out.println(new String(buf,0,num));*/ } private static void method_04() { //文本方式读取方式一 FileReader fr=null; try { fr = new FileReader("d.txt"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { int ch=0; while((ch=fr.read())!=-1){ System.out.println((char)ch); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void method_03() { //原有字符的续写 FileWriter fw=null; try { fw=new FileWriter("d.txt",true); fw.write("你好\r\n谢谢"); } catch (Exception e) { System.out.println(e.toString()); } finally{ try { if(fw!=null) fw.close(); } catch (Exception e2) { System.out.println(e2.toString()); } } } private static void method_02() { FileWriter fw=null; try { fw=new FileWriter("c.txt"); fw.write("abcdef"); } catch (Exception e) { System.out.println(e.toString()); } finally{ try { if(fw!=null) fw.close(); } catch (Exception e2) { System.out.println(e2.toString()); } } /* * 1.try{}catch(){}每段代码都是独立的,在当前代码有效。所以引用对象在代码块外面定义,初始化在try{}里面进行 * 2.fw.close()捕获异常。如果new FileWriter("k:\\c.txt"),如果k为无效磁盘,那么finally中的close(),fw就抛出异常 * */ } private static void method_01() throws IOException { //1.创建一个FileWriter对象。该对象一被初始化就必须要声明被操作的文件。 //而且这文件会被创建到到指定目录下。如果该目录下已有同名文件,将被覆盖 FileWriter f=new FileWriter("b.txt"); //调用write方法,将字符串写入到流中 f.write("nihao"); //刷新流对象中的缓冲中的数据。将数据刷新到目的地址中。 //f.flush(); //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。 //将数据刷到目的地中。 //和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭 f.close(); } }