一、字元流
所有的檔案都是位元組檔案,而隻有文本檔案的資料可以稱為字元。
1、字元輸入流父類Reader
方法 | 說明 |
---|---|
close() | 關閉流資源 |
read() | 讀取一個字元 |
read(char[] chs) | 讀取一個字元數組的内容 |
2、FileReader類
構造方法
方法 | 說明 |
---|---|
FileReader(File file) | 使用File對象的路徑建立輸入流 |
FileReader(String fileName) | 使用字元串路徑建立輸入流 |
- 代碼示範
構造方法示範:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Test01 {
public static void main(String[] args) throws FileNotFoundException {
//字元輸入流構造方法
/*
注意事項:
1.如果檔案不存在,輸入流會報錯(系統找不到指定的檔案。)
2.如果寫的是檔案夾,流對象都會報錯(拒絕通路。)
*/
//FileReader(File file)
//使用File對象的路徑建立輸入流
//FileReader fr = new FileReader(new File("day10\\123.txt"));
//FileReader(String fileName)
//使用字元串路徑建立輸入流
FileReader fr2 = new FileReader("day10\\123.txt");
}
}
常用讀取方法示範(一次讀取一個字元和一次讀取字元數組):
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test02 {
public static void main(String[] args) throws IOException {
//字元輸入流的常用方法
FileReader fr = new FileReader("C:\\Users\\jin\\Desktop\\檔案複制.java");
// FileInputStream fr = new FileInputStream("C:\\Users\\jin\\Desktop\\檔案複制.java");
//read() :讀取一個字元
//傳回的是字元對應的數值
//如果讀到了檔案的末尾會傳回-1
//int i;
//while((i=fr.read()) != -1){
// System.out.println((char)i);
//}
//read(char[] chs): 讀取一個字元數組的内容
//讀取傳回的是讀取到的字元個數,如果讀到了末尾會傳回-1
char[] chs = new char[5];
int len;
while((len=fr.read(chs)) != -1){
System.out.println(new String(chs,0,len));
}
//close()
//關閉流資源
fr.close();
}
}
3、字元輸出流父類Writer
常用方法
方法 | 說明 |
---|---|
close() | 關閉流資源 |
flush() | 重新整理 |
write(int c) | 寫出一個字元 |
write(char[] cbuf) | 寫出一個字元數組的内容 |
write(char[] b, int off, int len) | 寫出一個字元數組的一部分 |
write(String str) | 寫出一個字元串 |
4、FileWriter類
構造方法
方法 | 說明 |
---|---|
FileWriter(File file) | 用File對象所表示的路徑建立輸出流對象 |
FileWriter(String fileName) | File字元串所表示的路徑建立輸出流對象 |
FileWriter(File file,boolean b) | 用File對象所表示的路徑建立輸出流對象,true表示續寫 |
FileWriter(String fileName,boolean b) | File字元串所表示的路徑建立輸出流對象,true表示續寫 |
- 代碼示範
構造方法示範:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class Test03 {
public static void main(String[] args) throws IOException {
//字元輸出流構造方法
/*
注意事項:
1.如果檔案不存在,輸出流會建立檔案
2.如果檔案已存在,輸出流會覆寫檔案
3.所有流隻能操作檔案,不能操作檔案夾(拒絕通路。)
4.如果構造加了參數true 表示不清空檔案 續寫
*/
//FileWriter(File file)
//用File對象所表示的路徑建立輸出流對象
//FileWriter fw = new FileWriter(new File("day10\\123.txt"));
//FileWriter(String fileName)
//File字元串所表示的路徑建立輸出流對象
//FileWriter fw2 = new FileWriter("day10\\123.txt");
//FileWriter(File file,boolean b)
//用File對象所表示的路徑建立輸出流對象,true表示續寫
//FileWriter fw = new FileWriter(new File("day10\\123.txt"),true);
//FileWriter(String fileName,boolean b)
//File字元串所表示的路徑建立輸出流對象,true表示續寫
FileWriter fw2 = new FileWriter("day10\\123.txt",true);
}
}
- 常用方法示範
常用方法:
import java.io.FileWriter;
import java.io.IOException;
public class Test05 {
public static void main(String[] args) throws IOException {
//建立對象
FileWriter fw = new FileWriter("day10\\123.txt");
//write(int c)
//寫出一個字元
fw.write(97);
fw.write('a');
fw.write('我');
//write(char[] cbuf)
//寫出一個字元數組的内容
char[] chs = {'a','b','c','我','愛','你'};
fw.write(chs);
//write(char[] b, int off, int len)
//寫出一個字元數組的一部分
//輸出“我愛你”這部分,3索引開始輸出3個
fw.write(chs,3,3);
//write(String str)
//寫出一個字元串
fw.write("石原裡美");
//關閉資源
fw.close();
}
}
- 關閉和重新整理
字元輸出流底層有一個緩沖區,輸出的字元會被先放在緩沖區。
當調用重新整理或者是緩沖區放滿時才會真正的輸出到檔案中。
close()方法自帶重新整理功能,隻要最後記得關流,中間可以不做重新整理。
import java.io.FileWriter;
import java.io.IOException;
public class Test04 {
public static void main(String[] args) throws IOException {
//字元輸出流的常用方法
FileWriter fw = new FileWriter("day10\\123.txt");
//輸出
fw.write(97);
fw.write(97);
//flush()
//重新整理(可以把緩沖區的資料重新整理到檔案中)
//close()
//關閉方法其實自帶了重新整理功能
//在最後隻要調用了關閉就可以把緩沖區的内容全部放到檔案中
//關閉流資源
fw.close();
}
}
常見錯誤:
//要求:給檔案輸出123456789
//-------使用位元組輸出流不好做------------------------
//建立位元組輸出流
FileOutputStream fos = new FileOutputStream("day10\\123.txt");
//循環
for (int i = 1; i < 10; i++) {
fos.write(i);
}
//關流
fos.close();
-------使用字元輸出流好做------------------------
//建立字元輸出流
FileWriter fos = new FileWriter("day10\\123.txt");
//循環
for (int i = 1; i < 10; i++) {
fos.write(i+"");
}
//關流
fos.close();
簡單結論:
位元組流:
用于操作非文本資料(也可以操作文本資料但是我們不用)
字元流:
用于操作文本資料(不能操作非文本資料)