javaSE (三十一)IO字元流、用字元流.nextLine()反轉文字、轉換流記憶體示意圖
阿新 • • 發佈:2018-12-16
1、位元組流和字元流的區別
其實字元流和位元組流沒多大區別,字元流也可以拷貝檔案,但不推薦使用,因為讀取的時候位元組轉字元,然後字元還是要轉位元組 (用碼錶來進行位元組和字元之間的轉換)
2、什麼時候用到字元流?
“只讀或者只寫的時候”
程式需要讀取一段文字,或者需要寫出一段文字的時候可以用字元流
讀取的時候按照字元大小讀取的,不會出現半個中文這陣種情況
寫出的時候可以直接將字串寫出,不用轉換成字元陣列
3、字元流只能拷貝純文字的檔案
原因:位元組轉換成字元,按照碼錶,如果不是純文字,就找不到對應的字元(比如圖片、mp3),就不能轉換了
4、用nextLine反轉文字
問題:將文字第一行變成最後一行,以此類推
思路:
-
用buffedReader的nextLine()方法讀取每一行,放到ArrayList裡面
一開始想用字串陣列儲存每一行的字串,結果發現數組需要給定初始化長度(就算動態也需要遍歷),所以直接用集合!!!! -
反向遍歷集合,輸入到buffedRrite裡面(這裡用普通的遍歷,因為增強for不能反序)
-
流物件儘量晚開早關(但是調整的話好煩啊)
程式碼:
package cn.njupt;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
//注意:流物件儘量晚開早關(但是調整的話好煩啊)
public class file {
public static void main(String[] args) throws IOException {
BufferedReader bre = new BufferedReader(new FileReader("xxx.txt"));
BufferedWriter bwr = new BufferedWriter(new FileWriter("bbb.txt"));
ArrayList<String> list = new ArrayList<>();
String line;
while ((line = bre.readLine()) != null) {
list.add(line);
}
// 增強for迴圈不能反序,所以這裡直接用普通的for迴圈
for (int i = list.size() - 1; i >= 0; i--) {
bwr.write(list.get(i));
bwr.newLine();
}
bre.close();
bwr.close();
}
}
5、轉換流:(為了優化流的傳輸)
public class file {
public static void main(String[] args) throws IOException {
BufferedReader bre =
new BufferedReader(new InputStreamReader(new FileInputStream("utf-8.txt"),"utf-8"));
BufferedWriter bwr =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"),"gbk.txt"));
}
轉換流的記憶體示意圖: