上節(jié)我們講到「Java中常用流:數(shù)據(jù)流和對象流」琉闪,本節(jié)我們學(xué)習(xí)文件字符流和文件緩沖流~
文件字符流
前面介紹的文件字節(jié)流可以處理所有的文件,但是字節(jié)流不能很好的處理Unicode字符斯入,經(jīng)常會出現(xiàn)“亂碼”現(xiàn)象。所以增蹭,我們處理文本文件磅摹,一般可以使用文件字符流户誓,它以字符為單位進行操作。
【示例1】使用FileReader與FileWriter實現(xiàn)文本文件的copy
package?com.bjsxt.io;
import?java.io.*;
/**
?*?測試文件字符流
?*?@author?尚學(xué)
?*
?*/
public?class?Demo07 {
????public?static?void?main(String[]?args) {
????????//寫法和使用stream基本一樣碍彭。只不過庇忌,讀取時是讀取的字符舰褪。
??????? 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增加了緩存機制抵知,大大提高了讀寫文本的效率刷喜,同時立砸,提供了方便的按行讀的方法:readLine(); ?處理文本時,我們一般可以使用字符緩沖流浊闪。【示例2】使用BufferReader與BufferWriter實現(xiàn)文本文件的復(fù)制
import?java.io.*;
public?class?Demo08 {
????public?static?void?main(String[]?args) {
????????//?注:處理文本文件時搁宾,實際開發(fā)中可以用如下寫法倔幼,簡單高效!翩腐!
??????? 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筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記蛛砰。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗悠瞬,曾在神州數(shù)碼涯捻、航天院某所研發(fā)中心從事軟件設(shè)計及研發(fā)工作障癌,從小白逐漸做到工程師、高級工程師康辑、架構(gòu)師轿亮。精通Java平臺軟件開發(fā),精通JAVAEE按咒,熟悉各種流行開發(fā)框架但骨。
? 筆記包含從淺入深的六大部分:
? A-Java入門階段
? B-數(shù)據(jù)庫從入門到精通
? C-手刃移動前端和Web前端
? D-J2EE從了解到實戰(zhàn)
? E-Java高級框架精解
? F-Linux和Hadoop?