1犯眠、基本介紹
在IO流基礎(chǔ)中的第2部分悦析,有關(guān)設(shè)備 的內(nèi)容中提到了鍵盤(pán)(標(biāo)準(zhǔn)輸入)开财、控制臺(tái)(標(biāo)準(zhǔn)輸出),下面就詳細(xì)的介紹一下什么是標(biāo)準(zhǔn)的輸入與輸出:
標(biāo)準(zhǔn)的輸入流與輸出流都屬于System類的靜態(tài)成員惹悄。
其中in代表的是已經(jīng)創(chuàng)建好的可以直接從鍵盤(pán)讀取的InputStream類型的流對(duì)象淹辞;
public static final InputStream in
out代表的是已經(jīng)創(chuàng)建好的可以直接寫(xiě)入數(shù)據(jù)到控制臺(tái)的PrintStream類型的流對(duì)象;
public static final PrintStream out
對(duì)于簡(jiǎn)單獨(dú)立的 Java 應(yīng)用程序俘侠,編寫(xiě)一行輸出數(shù)據(jù)的典型方式是:
System.out.println(data)
2象缀、使用標(biāo)準(zhǔn)的輸入流
import java.io.IOException;
import java.io.InputStream;
public class Test1 {
public static void main(String[] args) throws IOException {
Demo1();
}
public static void Demo1() throws IOException{
//使用標(biāo)準(zhǔn)輸入流,即從鍵盤(pán)直接輸入
InputStream is = System.in;
/*
* in是System類的一個(gè)靜態(tài)成員
* 因此可以通過(guò)類名直接訪問(wèn)爷速,即System.in
* in又是InputStream對(duì)象的引用
* 因此創(chuàng)建InputStream對(duì)象is指向in
*/
int num = is.read();//每次讀取單個(gè)字符央星,返回字節(jié)
//read()方法被稱為阻塞式方法,只要沒(méi)有輸入惫东,就會(huì)一直等待
System.out.println((char)num);
}
}
3莉给、使用標(biāo)準(zhǔn)的輸入流實(shí)現(xiàn)簡(jiǎn)單功能
import java.io.IOException;
import java.io.InputStream;
public class Test2 {
public static void main(String[] args) throws IOException {
Demo2();
}
public static void Demo2() throws IOException{
/*
* 實(shí)現(xiàn)如下功能:
* 循環(huán)讀取鍵盤(pán)輸入的數(shù)據(jù)
* 滿一行之后輸出大寫(xiě)字符
* 不滿一行進(jìn)行存儲(chǔ)
*/
InputStream in = System.in;
int num;
//從鍵盤(pán)輸入的都是字符,因此使用StringBuilder處理進(jìn)行存儲(chǔ)
StringBuilder sb = new StringBuilder();
while(true){
num = in.read();
if(num=='\r'){//windows下?lián)Q行符為"\r\n"兩個(gè)字符
continue;//如果是'\r'就繼續(xù)
}else if(num=='\n'){//如果是'\n'則表示已滿一行
if("over".equals(sb.toString())){
break;//如果輸入"over"結(jié)束循環(huán)
}
System.out.println(sb.toString().toUpperCase());//獲得輸入的字符串并調(diào)用轉(zhuǎn)大寫(xiě)方法
//在下次輸出前清除StringBuilder中存儲(chǔ)的字符串
sb.delete(0, sb.length());//刪除從下標(biāo)0開(kāi)始到字符串全長(zhǎng)也就是末尾的字符
}else{
sb.append((char)num);//不滿一行就存儲(chǔ)數(shù)據(jù)
}
}
}
}
4廉沮、優(yōu)化上述功能
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
public class Test3 {
public static void main(String[] args) throws IOException {
Demo3();
}
public static void Demo3() throws IOException{
//使用ReadLine優(yōu)化Demo2()
/*
* 轉(zhuǎn)換流:
* 可以把字節(jié)輸入流轉(zhuǎn)換成字符輸入流的類:InputStreamReader
* 可以把字節(jié)輸出流轉(zhuǎn)換成字符輸出流的類:OutputStreamWriter
*/
//定義標(biāo)準(zhǔn)的字節(jié)輸入流
InputStream in = System.in;
//把字節(jié)輸入流轉(zhuǎn)換成字符輸入流
InputStreamReader isr = new InputStreamReader(in);
//為了提高效率颓遏,使用BufferedReader
BufferedReader br = new BufferedReader(isr);
//定義標(biāo)準(zhǔn)的字符輸出流
PrintStream out = System.out;
//把字節(jié)輸出流轉(zhuǎn)換成字符輸出流
OutputStreamWriter osw = new OutputStreamWriter(out);
//為了提高效率,使用BufferedWriter
BufferedWriter bw = new BufferedWriter(osw);
String line = null;
//每次從鍵盤(pán)讀取一行
while((line=br.readLine())!=null){
if("over".equals(line)){//如果輸入"over"結(jié)束循環(huán)
break;
}
//使用字符流輸出
bw.write(line.toUpperCase());
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}
}
5滞时、進(jìn)一步精簡(jiǎn)上述代碼
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test4{
public static void main(String[] args) throws IOException {
Demo4();
}
public static void Demo4() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line=br.readLine())!=null){
if("over".equals(line)){
break;
}
//直接使用標(biāo)準(zhǔn)字節(jié)流輸出
System.out.println(line.toUpperCase());
/*
* 與in類似叁幢,out也是定義在System類中的靜態(tài)成員,所屬類型為printStream
* out就是字節(jié)輸出流對(duì)象坪稽,對(duì)象可調(diào)用println方法曼玩,即out.println
* 對(duì)比可見(jiàn)直節(jié)使用字節(jié)輸出流僅需要一行代碼
* 同時(shí)也不再需要定義更多的變量
* 因此在平時(shí)使用時(shí)常用字節(jié)流輸出
*/
}
br.close();
}
}
6、優(yōu)化標(biāo)準(zhǔn)的輸入與輸出
之前標(biāo)準(zhǔn)的輸入流與輸出流是指從鍵盤(pán)直接讀取并且寫(xiě)入到控制臺(tái)窒百,如下:
源(從哪讀):鍵盤(pán)
目的(往哪寫(xiě)):控制臺(tái)
現(xiàn)在要實(shí)現(xiàn)從鍵盤(pán)讀取黍判,直接寫(xiě)入到文件中,如下:
源(從哪讀):鍵盤(pán)
目的(往哪寫(xiě)):文件
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
public class Test5 {
public static void main(String[] args) throws IOException {
Demo5();
}
public static void Demo5() throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\Demo5.txt"));
String line = null;
while((line=br.readLine())!=null){
if("over".equals(line)){
break;
}
bw.write(line.toUpperCase());
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}
}
接著要實(shí)現(xiàn)從文件讀取篙梢,寫(xiě)入到控制臺(tái)顷帖,如下:
源(從哪讀):文件
目的(往哪寫(xiě)):控制臺(tái)
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Test6 {
public static void main(String[] args) throws IOException {
Demo6();
}
public static void Demo6() throws IOException{
BufferedReader br = new BufferedReader(new FileReader("F:\\Demo5.txt"));
String line = null;
while((line=br.readLine())!=null){
if("over".equals(line)){
break;
}
System.out.println(line.toUpperCase());
}
br.close();
}
}
7、改變標(biāo)準(zhǔn)的輸入與輸出
改變標(biāo)準(zhǔn)的輸入:System.setIn();
改變標(biāo)準(zhǔn)的輸出:System.setOut();
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
public class Test7 {
public static void main(String[] args) throws IOException {
Demo7();
}
public static void Demo7() throws IOException{
System.setIn(new FileInputStream("F:\\Demo5.txt"));//改變標(biāo)準(zhǔn)的輸入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.setOut(new PrintStream("F:\\Demo5_copy.txt"));//改變標(biāo)準(zhǔn)的輸出
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null;
while((line=br.readLine())!=null){
if("over".equals(line)){
break;
}
bw.write(line.toUpperCase());
bw.newLine();
bw.flush();
}
br.close();
bw.close();
}
}
版權(quán)聲明:歡迎轉(zhuǎn)載渤滞,歡迎擴(kuò)散贬墩,但轉(zhuǎn)載時(shí)請(qǐng)標(biāo)明作者以及原文出處,謝謝合作蔼水! ↓↓↓