I/O(NI/O)流操作



数据流中的 API 结构和对象继承关系


字节流和字符流的区别:
1.字节流读取的时候,读到一个字节就返回一个字节。字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。
2.字节流可以处理所有类型数据,如图片,mp3,avi。而字符流只能处理字符数据。

结论:只要是处理纯文本数据,就要优先考虑使用字符流。除此之外都用节流。

当指定绝对路径时,定义目录分隔符有两种方式:

1,反斜线但是一定要写两个。\\new FileWriter("c:\\demo.txt");

2,斜线/  写一个即可。new FileWriter("c:/demo.txt");

通过字符流读取文件的经典例子

public static void main(String[] args) {
           FileReader fr = null; 
           try 
           { 
                fr = new FileReader("F:\\1111\\demo.txt"); 
                char[] buf = new char[1024];//该长度通常都是1024的整数倍。 
                int len = 0; 
                while((len=fr.read(buf))!=-1) 
                { 
                     System.out.println(new String(buf,0,len)); 
                } 
           } 
           catch(IOException e) 
           { 
                System.out.println(e.toString()); 
           }
     }



字符流的缓冲区:缓冲区的出现提高了对流的操作效率。

原理:其实就是将数组进行封装。

对应的对象:

BufferedWriter:特有方法:newLine():跨平台的换行符。

BufferedReader:特有方法:readLine():一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。

在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,

所以在建立缓冲区对象时,要先有流对象存在。

其实缓冲内部就是在使用流对象的方法,只不过加入了数组对数据进行了临时存储。为了提高操作数据的效率。

代码上的体现:

写入缓冲区对象。

//建立缓冲区对象必须把流对象作为参数传递给缓冲区的构造函数。

BufferedWriter bufw = new BufferedWriter(new FileWriter("buf.txt"));

bufw.write("abce");//将数据写入到了缓冲区。

bufw.flush();//对缓冲区的数据进行刷新。将数据刷到目的地中。

bufw.close();//关闭缓冲区,其实关闭的是被包装在内部的流对象。

读取缓冲区对象。

BufferedReader bufr = new BufferedReader(new FileReader("buf.txt"));

String line = null;

//按照行的形式取出数据。取出的每一个行数据不包含回车符。

while((line=bufr.readLine())!=null)

{

System.out.println(line);

}

bufr.close();

readLine():方法的原理:

其实缓冲区中的该方法,用的还是与缓冲区关联的流对象的read方法。只不过,每一次读到一个字符,先不进行具体操作,先进行临时存储。当读取到回车标记时,将临时容器中存储的数据一次性返回。



利用字符流的缓冲区原理:读取文件——一个字符一个字符读取,放入缓冲区,当读到换行符时(一下所说的所有利用缓冲区的换行都是指跨平台的换行操作 readLine()),则返回读到的这一行数据,不包括换行符
                                        写文件——一个字符一个字符的写入缓冲区,写完之后一起刷新到目的地(比如文件)


file类

特别的字段:separator:跨平台的目录分隔符。

如:File file = new File("c:"+File.separator+"abc"+File.separator+"a.txt");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值