目錄
- 字元FileReader/FileWriter
- FileReader
- 建立流通道new FileReader
- 讀取文本檔案内容,一次讀取一個字元數組, 異常處理, 自動關閉
- FileWriter
- InputStreamReader/OutputStreamWriter轉換流讀寫
字元FileReader/FileWriter
以字元為機關讀寫檔案内容, 隻能讀寫純文字檔案, 要求文本檔案的編碼格式要與目前環境的編碼格式相容
FileReader
建立流通道new FileReader
FileReader fr = new FileReader("d:/abc.txt");
//abc.txt雖然是GBK編碼, 目前環境是UTF8編碼, abc.txt檔案中都是英文字元, 英文字元不管是GBK還是UTF8編碼都是一個位元組
//如果檔案是GBK格式, 檔案中有中文, 讀取時會出現亂碼
//一般使用FileReader讀取與目前環境編碼一緻的檔案
private static void m1() throws IOException {
FileReader fr = new FileReader("d:/Test08.java");
//read()一次讀取一個字元, 傳回字元的碼值,讀到檔案末尾傳回-1
int cc = fr.read();
while( cc != -1 ){
//把讀到的字元列印到螢幕上
System.out.print( (char)cc );
cc = fr.read();
}
fr.close();
}
讀取文本檔案内容,一次讀取一個字元數組, 異常處理, 自動關閉
private static void m2() {
try (
FileReader fr = new FileReader("d:/test08.java");
){
char [] contents = new char[1024];
int len = fr.read(contents);
while( len != -1 ){
//把讀到的len個字元進行處理, 轉換為字元串列印
System.out.print( new String(contents , 0 , len) );
len = fr.read(contents);
}
} catch (Exception e) {
e.printStackTrace();
}
}
FileWriter
//檔案不存在就建立, 檔案已存在,以追加的方式打開
fw = new FileWriter(“d:/xyz.txt”, true);
public static void main(String[] args) {
//字元流 每次直接讀取一個字元,底層有一個轉換流
//字元流隻能讀純文字檔案
FileReader reader = null;
FileWriter writer = null;
try {
reader = new FileReader("E:\\nihao.txt");
writer = new FileWriter("E:\\b.txt", true);
// System.out.println((char) reader.read());
// System.out.println(reader.read());
// System.out.println(reader.read());
// System.out.println(reader.read());
int c = reader.read();
System.out.println((char) c);
while (true) {
if (c == -1) break;
System.out.print((char) c);
writer.write(c);
c = reader.read();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
writer.close();//必須關閉對應的流才能顯示
} catch (IOException e) {
e.printStackTrace();
}
//
// //字元流 每次直接讀取一個字元,底層有一個轉換流
// //字元流隻能讀純文字檔案
// FileReader reader = new FileReader("E:\\nihao.txt");
// FileWriter writer = new FileWriter("E:\\b.txt");
System.out.println((char) reader.read());
System.out.println(reader.read());
System.out.println(reader.read());
System.out.println(reader.read());
// int c=reader.read();
// System.out.println((char)c);
// while (true){
// if (c==-1) break;
// System.out.print((char)c);
// writer.write(c);
// c=reader.read();
//
// }
// reader.close();
// writer.close();//必須關閉對應的流才能顯示
//
//
}
}
文本檔案的複制
一次複制一個字元, 異常處理, 自動關閉流
一次複制一個字元數組, 異常處理, 手動關閉流
InputStreamReader/OutputStreamWriter轉換流讀寫
FileReader/FileWriter隻能讀寫與目前環境編碼相容的文本檔案
如果文本檔案與目前環境編碼不相容, 使用InputStreamReader/OutputStreamWriter轉換流讀寫
轉換流采用了擴充卡設計模式
OutputStream out = new FileOutputStream("d:/def.txt", true );
OutputStreamWriter osw = new OutputStreamWriter(out, "GBK");
//在目前程式與指定的檔案之間建立位元組流通道
InputStream in = new FileInputStream("d:/def.txt");
//使用GBK編碼,把in位元組流中的資料轉換為字元流
InputStreamReader isr = new InputStreamReader(in, "GBK");
//當操作的檔案編碼與目前環境編碼不相容, 使用OutputStreamWriter把字元以指定的編碼轉換為位元組
private static void m2() throws IOException {
//把字元儲存到d:/def.txt檔案, 該檔案是GBK編碼, 目前環境是UTF8編碼, 把字元轉換為GBK格式再儲存
OutputStream out = new FileOutputStream("d:/def.txt", true );
OutputStreamWriter osw = new OutputStreamWriter(out, "GBK");
osw.write("\r\n");
osw.write("目前的内容是使用轉換流儲存到檔案中的, 工作區編碼是UTF8, 該檔案使用GBK編碼 ");
osw.close();
}
private static void m1() throws IOException {
//讀取d:/def.txt檔案, 該檔案使用GBK編碼,目前環境使用UTF8編碼
//在目前程式與指定的檔案之間建立位元組流通道
InputStream in = new FileInputStream("d:/def.txt");
//使用GBK編碼,把in位元組流中的資料轉換為字元流
InputStreamReader isr = new InputStreamReader(in, "GBK");
int cc = isr.read();
while( cc != -1){
System.out.print((char)cc);
cc = isr.read();
}
isr.close();
}