--------------------ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! --------------------
1.字節流轉換成字符流(InputStreamReader)
字節流:InputStream -------讀取
字符流:Reader ------讀取
在字節流讀取的時候用的是一個一個字節的讀取方式或者是字節數組的讀取方式,
在字符流中讀取的時候,除了有一個一個字符的讀取方式和數組 的讀取 方式外 ,在緩衝技術裏面有一行一行的讀取,這個方法在讀取的時候很好用也很方面,那麼我們就可以把字節流的轉換成字符流,然後利用緩衝對象來使用讀取一行的方法。
字符流要向獲得從鍵盤錄入的信息,那麼必須使用字節流,然後把字節流準換成字符流
步驟:
1.準備好一個字節流(InputStream in)
2.利用InputStreamReader(isr)把字節流對象作爲其構造函數的參數,new InputStreamReader(in)
3.然後使用緩衝技術(BufferedReader對象封裝轉換流)newBufferedReader(isr),然後就可以使用讀取行的方法了。
4.最後要關閉流
舉例:讀取鍵盤的錄入的數據
InputStream in = System.in;
InputStreamReader isr =new InputStreamReader(in);
BufferedReader br =newBufferedReader(isr);
然後我們就可以使用br對象紀念性讀取鍵盤錄入的數據了。
我們也可以把這三句轉換成一句。
BufferedReader bw = new BufferedReader (isr));
2. 字節輸入流轉換成字符輸入流(OutputStreamWriter)
字符流:Writer -----寫入流
字節流:OutputStream ---寫入流
OutputStreamWriter 是字符流通向字節流的橋樑:可使用指定的charset
將要寫入流中的字符編碼成字節。
步驟:
1.準備一個字符流
2.利用OutputStreamWriter(OutputStream out)把其轉換成字節流,
3.可以利用其緩衝對象對其進行封裝。然後做相應的操作。
4.最後關閉流
舉例:
OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bw = new BufferedWriter(osw);
也可以將這三句合成一句話
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
3. 流操作(轉換流練習)
1. 源:鍵盤錄入 (輸出)目的:控制檯
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class ZhuanhuanDemo {
public static void main(String[] args) throws IOException {
/*InputStream in = System.in;//原始鍵盤
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);//封裝類字符流*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
/*OutputStream out = System.out;//輸出的目的是控制檯
OutputStreamWriter osw = new OutputStreamWriter(out);//將字符流轉換成字節流
BufferedWriter bw = new BufferedWriter(osw);*/
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while ((line = br.readLine()) != null) {
if ("over".equals(line))
break;
bw.write("輸入的內容是:" + line);
bw.newLine();
bw.flush();
}
}
}結果:
張三
輸入的內容是:張三
李四
輸入的內容是:李四
abc
輸入的內容是:abc
over
2. 源:鍵盤 輸出目的:文件
就是將鍵盤錄入的數據寫到了文件中
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ZhuanhuanDemo {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 源:鍵盤
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("F:\\demo.txt")));// 目的:文件
String line = null;
while ((line = br.readLine()) != null) {
if ("over".equals(line))
break;
bw.write(line);//寫入
bw.newLine();
bw.flush();
}
bw.close();// 關閉流
br.close();// 關閉流
}
}
3. 源:文件 目的:控制檯
將文件的內容打印在控制檯上
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ZhuanhuanDemo {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("F:\\demo.txt")));// 源:文本
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));// 目的:控制檯
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line);//輸出
bw.newLine();
bw.flush();
}
bw.close();// 關閉流
br.close();// 關閉流
}
}
結果:
張三
李四
王五
4. 流操作規律
1.明確源和目的
源:輸入流:InputStream Reader
目的:輸出流:OutputStream Writer
2.操作的數據是否是純文本
是:字符流
不是:字節流
3.當體系明確後,在明確要使用那個具體的對象。
通過設備來進行區分:
源設備:內存,硬盤,鍵盤
目的內存:內存,硬盤,控制檯
需求:
1.將一個文件數據存儲到另一個文件中,複製文件
源:文件 使用讀取流: InputStream Reader
是否是文本文件: 是:用Reader
明確對象:明確設備:硬盤中的文件FileReader對象
提高效率。利用緩衝區。BufferedReader。
FileReader fr=new FileReader(“a.txt”);
BufferedReader br=new BufferedReader(fr);
目的 :文件:OutputStream Writer
是否是純文本:Writer
設備:硬盤中的文件
提高效率。利用緩衝區。BufferedWriter。
對象:FileWriter
FileWriter fw=new FileWriter();
BufferedWriter bw=new BufferedWriter(fw);
2.需求
將鍵盤錄入的數據保存到另一個文件中。
源:InputStream Reader
純文本:Reader
設備:鍵盤 對象 System.in
InputStreamReader idr=new InputStreamReader(System.in);
提高效率用BufferedReader
BufferedReader bufr=new BufferedReader(idr);
目的:OurStream ,Writer
純文本:Writer
設備:硬件的文件
FileWrite fw=new FileWriter(“文件”);
BufferefWriter bufW=new BufferefWriter(fw);
要指定編碼方式,必須使用轉換流,OutputStreamWriter擴展:指定編碼方式
OutputStreamWriter(OutputStream out,String charsetName)
OutputStreamWriter osw=new OutputStreamWriter(newFileOutputStream(“F:\\demo.txt”,”utf-8”))這制訂了編碼方式;
在轉換流構造方法中指定。
當需要指定編碼方式的時候,那麼就需要此轉換流OutputStreamWriter。
當需要指定編碼方式的時候那麼就需要轉換流來操作。
當需要讀取別的編碼方式的文件的時候,也得需要使用轉換流
字節流不用刷新緩衝區,字符流要刷新緩衝區
public class ZhuanhuanDemo {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 源:鍵盤
/*默認的編碼是jbk。*/
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("F:\\demo1.txt"),"utf-8"));// 目的:控制檯
String line = null;
while ((line = br.readLine()) != null) {
if ("over".equals(line))
break;
bw.write(line);// 輸出
bw.newLine();
bw.flush();
}
bw.close();// 關閉流
br.close();// 關閉流
}
當你輸入兩個漢字就結束的話,那麼文件大小是8個字節,要是默認的話就是6個字節,指定GBK的話,那也是6個字節,所以可以確認默認的是GBK編碼。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ZhuanhuanDemo {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 源:鍵盤
/*默認的編碼是jbk。*/
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("F:\\demo1.txt"),"utf-8"));// 目的:控制檯
String line = null;
while ((line = br.readLine()) != null) {
if ("over".equals(line))
break;
bw.write(line);// 輸出
bw.newLine();
bw.flush();
}
bw.close();// 關閉流
br.close();// 關閉流
}
}
5. 改變標準輸入輸出設備
public static void main(String[] args) throws IOException {
/*
* static void setIn(InputStream in)改變輸入設備
* static void setOut(PrintStream out)改變輸出的設備目的
* */
System.setIn(new FileInputStream("F:\\demo.txt"));//把輸入設備定義到了一個文件流上,就是源:文件
System.setOut(new PrintStream("F:\\demo1.txt"));//把輸入設備定義到一個文件上,就是把內容輸入到一個文件中
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 源:鍵盤
/*默認的編碼是jbk。*/
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("F:\\demo1.txt"),"utf-8"));// 目的:控制檯
String line = null;
while ((line = br.readLine()) != null) {
if ("over".equals(line))
break;
bw.write(line);// 輸出
bw.newLine();
bw.flush();
}
bw.close();// 關閉流
br.close();// 關閉流
}
6. 異常日誌文件
我們可以將程序中出現的異常保存到一個文件中,那麼我就可以方便我們查看,在開發中也是把異常打印到文件中,不可能讓用戶看到異常。我們也可以下載logf4工具,這是專門處理異常的工具。
下面我們寫一個字節的異常日誌文件。
void |
printStackTrace(PrintStream s) 將此 throwable 及其追蹤輸出到指定的輸出流。 |
public class ExceptionDemo {
public static void main(String[] args) {
try {
int a = 4 / 0;
} catch (Exception e) {
try {
PrintStream ps = new PrintStream("F:\\exception.log");
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-DDHH:mm:ss");
String s = sdf.format(new Date());
ps.println(s);//將日期傳進入
e.printStackTrace(ps);// 將流傳入,指定目的
} catch (FileNotFoundException e1) {
System.out.println("日誌文件創建失敗");
}
}
}
}
結果:
7.系統屬性信息
系統日誌
將系統的實現存到文件中
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Properties;
public class PropertiesDemo {
public static void main(String[] args) {
/*list(PrintStream out)將屬性列表輸出到指定的輸出流。*/
Properties p=new Properties();
p=System.getProperties();
try {
p.list(new PrintStream("F:\\SystemInfo.txt"));
} catch (FileNotFoundException e) {
System.out.println("創建文件失敗");
}
}
}
--------------------ASP.Net+Android+IOS開發、.Net培訓、期待與您交流!
--------------------