上節(jié)我們講到「Java中常用流:數(shù)據(jù)流和對(duì)象流」,本節(jié)我們學(xué)習(xí)文件字符流和文件緩沖流~
文件字符流
前面介紹的文件字節(jié)流可以處理所有的文件,但是字節(jié)流不能很好的處理Unicode字符,經(jīng)常會(huì)出現(xiàn)“亂碼”現(xiàn)象。所以,我們處理文本文件,一般可以使用文件字符流,它以字符為單位進(jìn)行操作。
【示例1】使用FileReader與FileWriter實(shí)現(xiàn)文本文件的copy
package?com.bjsxt.io;
import?java.io.*;
/**
?*?測(cè)試文件字符流
?*?@author?尚學(xué)
?*
?*/
public?class?Demo07 {
????public?static?void?main(String[]?args) {
????????//寫法和使用stream基本一樣。只不過,讀取時(shí)是讀取的字符。
??????? FileReader?fr?=?null;
??????? FileWriter?fw?=?null;
????????int?c?= 0;
????????try?{
?????????????fr?=?new?FileReader("d:/a.txt");
?????????????fw?=?new?FileWriter("d:/d.txt");
?????????????while((c=fr.read())!=-1){
?????????????????fw.write(c);
???????????? }
??? ??? } ??catch?(FileNotFoundException?e) {
?????????????e.printStackTrace();
??????? }?catch?(IOException?e) {
?????????????e.printStackTrace();
??????? }finally{
?????????????try?{
?????????????????if(fw!=null){
?????????????????????fw.close();
???????????????? }
???????????? }?catch?(IOException?e) {
?????????????????e.printStackTrace();
???????????? }
?????????????try?{
?????????????????if(fr!=null){
?????????????????????fr.close();
???????????????? }
???????????? }?catch?(IOException?e) {
?????????????????e.printStackTrace();
???????????? }
??????? }
??? }
}
字符緩沖流
BufferReader/BufferWriter增加了緩存機(jī)制,大大提高了讀寫文本的效率,同時(shí),提供了方便的按行讀的方法:readLine(); ?處理文本時(shí),我們一般可以使用字符緩沖流。【示例2】使用BufferReader與BufferWriter實(shí)現(xiàn)文本文件的復(fù)制
import?java.io.*;
public?class?Demo08 {
????public?static?void?main(String[]?args) {
????????//?注:處理文本文件時(shí),實(shí)際開發(fā)中可以用如下寫法,簡(jiǎn)單高效!!
??????? FileReader?fr?=?null;
??????? FileWriter?fw?=?null;
??????? BufferedReader?br?=?null;
??????? BufferedWriter?bw?=?null;
??????? String?tempString?=?"";
????????try?{
?????????????fr?=?new?FileReader("d:/a.txt");
?????????????fw?=?new?FileWriter("d:/d.txt");
?????????????br?=?new?BufferedReader(fr);
?????????????bw?=?new?BufferedWriter(fw);
?????????????while?((tempString?=?br.readLine()) !=?null) {
?????????????????bw.write(tempString);
???????????? }
??????? }?catch?(FileNotFoundException?e) {
??????? ????e.printStackTrace();
??????? }?catch?(IOException?e) {
?????????????e.printStackTrace();
??????? }?finally?{
?????????????try?{
?????????????????if(bw!=null){
?????????????????????bw.close();
???????????????? }
???????????? }?catch?(IOException?e1) {
?????????????????e1.printStackTrace();
???????????? }
?????????????try?{
?????????????????if(br!=null){
?????????????????????br.close();
???????????????? }
???????????? }?catch?(IOException?e1) {
?????????????????e1.printStackTrace();
???????????? }
?????????????try?{
?????????????????if(fw!=null){
?????????????????????fw.close();
???????????????? }
???????????? }?catch?(IOException?e) {
?????????????????e.printStackTrace();
???????????? }
?????????????try?{
?????????????????if(fr!=null){
?????????????????????fr.close();
???????????????? }
???????????? }?catch?(IOException?e) {
?????????????????e.printStackTrace();
???????????? }
??????? }
??? }
}
? ? 到本章節(jié)為止,我們已經(jīng)學(xué)習(xí)了大部分的常見流,下節(jié)我們學(xué)習(xí)常見流的最后一篇~~
「全棧Java筆記」是一部能幫大家從零到一成長(zhǎng)為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗(yàn),曾在神州數(shù)碼、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作,從小白逐漸做到工程師、高級(jí)工程師、架構(gòu)師。精通Java平臺(tái)軟件開發(fā),精通JAVAEE,熟悉各種流行開發(fā)框架。
? 筆記包含從淺入深的六大部分:
? A-Java入門階段
? B-數(shù)據(jù)庫(kù)從入門到精通
? C-手刃移動(dòng)前端和Web前端
? D-J2EE從了解到實(shí)戰(zhàn)
? E-Java高級(jí)框架精解
? F-Linux和Hadoop?