1.1 字符流的練習(xí)之復(fù)制Java文件
1.1.1案例代碼
/*
* 把當(dāng)前項目目錄下的StringDemo.java內(nèi)容復(fù)制到當(dāng)前項目目錄下的Copy.java中
*
* 數(shù)據(jù)源:
* StringDemo.java---讀數(shù)據(jù)---字符流---InputStreamReader
* 目的地:
* Copy.java---寫數(shù)據(jù)---字符流---OutputStreamWriter
*/
public class CopyJavaTest {
public static void main(String[] args) throws IOException {
//封裝數(shù)據(jù)源
InputStreamReader isr = new InputStreamReader(new FileInputStream("StringDemo.java"));
//封裝目的地
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("Copy.java"));
//讀寫數(shù)據(jù)
//方式1:一次讀寫一個字符
// int ch;
// while((ch=isr.read())!=-1) {
// osw.write(ch);
// }
//方式2:一次讀寫一個字符數(shù)組
char[] chs = new char[1024];
int len;
while((len=isr.read(chs))!=-1) {
osw.write(chs, 0, len);
}
//釋放資源
osw.close();
isr.close();
}
}
1.2 字符流的練習(xí)之復(fù)制Java文件改進(jìn)版
1.2.1改進(jìn)原因
??轉(zhuǎn)換流的名字比較長善绎,而我們常見的操作都是按照本地默認(rèn)編碼實現(xiàn)的晰骑,所以,為了簡化我們的書寫,轉(zhuǎn)換流提供了對應(yīng)的子類。
- FileWriter
- FileReader
1.2.2 案例代碼
public class CopyJavaTest2 {
public static void main(String[] args) throws IOException {
//封裝數(shù)據(jù)源
FileReader fr = new FileReader("StringDemo.java");
//封裝目的地
FileWriter fw = new FileWriter("Copy.java");
//讀寫數(shù)據(jù)
//一次讀寫一個字符
// int ch;
// while((ch=fr.read())!=-1) {
// fw.write(ch);
// }
//一次讀寫一個字符數(shù)組
char[] chs = new char[1024];
int len;
while((len=fr.read(chs))!=-1) {
fw.write(chs, 0, len);
}
//釋放資源
fw.close();
fr.close();
}
}
1.3 字符緩沖區(qū)流的概述和使用
1.3.1字符緩沖區(qū)流的概述
- BufferedWriter
- 將文本寫入字符輸出流,緩沖各個字符钠糊,從而提供單個字符、數(shù)組和字符串的高效寫入壹哺。
- 可以指定緩沖區(qū)的大小,或者接受默認(rèn)的大小艘刚。在大多數(shù)情況下管宵,默認(rèn)值就足夠大了。
- 構(gòu)造方法:
- BufferedWriter(Writer out)
- BufferedReader
- 從字符輸入流中讀取文本攀甚,緩沖各個字符箩朴,從而實現(xiàn)字符、數(shù)組和行的高效讀取秋度。
- 可以指定緩沖區(qū)的大小炸庞,或者可使用默認(rèn)的大小。大多數(shù)情況下荚斯,默認(rèn)值就足夠大了埠居。
- 構(gòu)造方法:
- BufferedReader(Reader in)
1.3.2 案例代碼
public class BufferedStreamDemo {
public static void main(String[] args) throws IOException {
// //創(chuàng)建字符緩沖輸出流對象
// BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
// //調(diào)用寫數(shù)據(jù)的方法
// bw.write("hello");
// //釋放資源
// bw.close();
//創(chuàng)建字符緩沖輸入流對象
BufferedReader br = new BufferedReader(new FileReader("BufferedStreamDemo.java"));
//方式1:一次讀取一個字符
// int ch;
// while((ch=br.read())!=-1) {
// System.out.print((char)ch);
// }
//方式2:一次讀取一個字符數(shù)組
char[] chs = new char[1024];
int len;
while((len=br.read(chs))!=-1) {
System.out.print(new String(chs,0,len));
}
//釋放資源
br.close();
}
}
1.4 字符緩沖區(qū)流的練習(xí)之復(fù)制文本文件
1.4.1 案例代碼
/*
* 把項目目錄下的a.txt內(nèi)容復(fù)制到項目目錄下的b.txt中
*
* 數(shù)據(jù)源:
* a.txt---讀數(shù)據(jù)---字符流---InputStreamReader---FileReader---BufferedReader
* 目的地:
* b.txt---寫數(shù)據(jù)---字符流---OutputStreamWriter---FileWriter---BufferedWriter
*/
public class CopyTxtTest {
public static void main(String[] args) throws IOException {
//封裝數(shù)據(jù)源
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
//封裝目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
//讀寫數(shù)據(jù)
//一次讀寫一個字符數(shù)組
char[] chs = new char[1024];
int len;
while((len=br.read(chs))!=-1) {
bw.write(chs, 0, len);
}
//釋放資源
bw.close();
br.close();
}
}
1.5 字符緩沖區(qū)流的特殊功能
1.5.1 方法摘要
* BufferedWriter
* void newLine():寫入一個行分隔符,這個行分隔符是由系統(tǒng)決定的
* BufferedReader
* String readLine():包含該行內(nèi)容的字符串查牌,不包含任何行終止符,如果已到達(dá)流末尾滥壕,則返回 null
1.5.2 案例代碼
public class BufferedStreamDemo {
public static void main(String[] args) throws IOException {
// //創(chuàng)建字符緩沖輸出流對象
// BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
//
// //寫數(shù)據(jù)
// for(int x=0; x<3; x++) {
// bw.write("hello");
//// bw.write("\r\n");
// bw.newLine();
// bw.flush();
// }
//
// //釋放資源
// bw.close();
//創(chuàng)建字符緩沖輸入流對象
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
// //讀取一次
// String line = br.readLine();
// System.out.println(line);
// //在讀取一次
// line = br.readLine();
// System.out.println(line);
// line = br.readLine();
// System.out.println(line);
// //多讀取兩次
// line = br.readLine();
// System.out.println(line);
// line = br.readLine();
// System.out.println(line);
//最終版代碼
String line;
while((line=br.readLine())!=null) {
System.out.println(line);
}
//釋放資源
br.close();
}
}
1.6 字符緩沖區(qū)流的特殊功能復(fù)制Java文件
1.6.1 案例代碼
public class CopyJavaTest {
public static void main(String[] args) throws IOException {
//封裝數(shù)據(jù)源
BufferedReader br = new BufferedReader(new FileReader("BufferedStreamDemo.java"));
//封裝目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
//讀寫數(shù)據(jù)
String line;
while((line=br.readLine())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//釋放資源
bw.close();
br.close();
}
}