本篇博客主要介紹java的 字符流FileWirter和FileReader流,主要用於操做文件內容。
一.FileWriter(文件輸出字符流)
FileWriter與FileOutputStream相似,不過FileWriter是字符流,而FileOutputStream是字節流。
構造方法:
1.public File(FIle file)throws IOException------根據File建立FileWriter實例
2.public File(File file,boolean append)throws IOException--------根據File建立FileWriter實例,當append爲true 時追加內容到原內容後面
使用示例:
- public static void main(String[] args) {
- File file=new File("L:\\test.txt");
-
- try {
- //建立一個字符輸出流對象,true表示內容追加
- Writer wr=new FileWriter(file,true);
-
- String info="好好學習,每天向上";
- //向文件中輸出
- wr.write(info);
- //關閉流
- wr.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
複製代碼
一.FileReader(文件輸入字符流)
FileReader與FileInputStream相似,不過FileReader是字符流,而FileInputStream是字節流。
具體示例:
- public static void main(String[] args) {
- File file=new File("L:\\test.txt");
-
- try {
- //建立一個字符輸入流對象
- Reader in=new FileReader(file);
- //設置指定長度字符數組讀取
- char []cs=new char[7];
- StringBuffer sb=new StringBuffer();
- int len=-1;
- //讀取文件
- while((len=in.read(cs))!=-1)
- {
- sb.append(new String(cs,0,len));
-
- }
- System.out.println("文件內容爲: "+sb);
- //關閉流
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
複製代碼
運行結果:
<ignore_js_op>
此時咱們把換成用字節輸入流FileInputStream來讀取,以下:java
- public static void main(String[] args) {
- File file=new File("L:\\test.txt");
-
- try {
- //建立一個字節輸入流對象
- InputStream in=new FileInputStream(file);
- //設置指定長度字節數組讀取
- byte []bytes=new byte[7];
- StringBuffer sb=new StringBuffer();
- int len=-1;
- //讀取文件
- while((len=in.read(bytes))!=-1)
- {
- sb.append(new String(bytes,0,len));
-
- }
- System.out.println("文件內容爲: "+sb);
- //關閉流
- in.close();
- catch (IOException e) {
- e.printStackTrace();
-
-
- }
複製代碼
此時的運行結果出現亂碼: <ignore_js_op>
數組
不由會想,第一種字符讀取沒有出現亂碼,而使用字節讀取就出現了亂碼。
其實FileReader是在FileInputStream的基礎上實現的,看FileReader源碼可知。
字符流是按一個個字符爲單位來讀取,字節流是按一個個字節爲單位來讀取。因此咱們就能夠理解爲何字節流讀取漢字有時會出現亂碼的緣由了。在這裏是由於咱們每次讀取7個字節,而一個漢字多是2個或3個字節組成,要看使用的編碼。當咱們取了7個字節後使用new String(bytes,0,len)轉化爲字符串,可能咱們得到了一個漢字的不完整字節致使產生亂碼。而後咱們字節讀取是最基礎的,是正確的,任何基於字節的操做都是正確的,當咱們須要讀取的文本有漢字時建議使用字符輸入流FileReader防止產生亂碼。