java學習筆記(9)-Java I/O系統
阿新 • • 發佈:2019-02-17
第九章 Java I/O系統
1、題目
1.1、 何為流?根據流的方向,流可分為哪兩種?
流表示檔案傳播的方向和傳播的檔案資訊的集合。根據流的方向,流可分為輸入與輸出流。
PPT:流是在計算機的輸入、輸出操作中流動的資料序列。
1.2、 InputStream,OutputStream,Reader和Writer類的功能有何異同?
其中InputStream與Reader同為輸入流,程式可以通過它們從檔案讀取資訊;而OutputStream與Writer同為輸出流,程式可以通過它們向檔案輸出資訊。
PPT:
位元組流類主要用於讀寫諸如圖象或聲音等的二進位制資料。字元流類用於向字元流讀寫16位二進位制字元。
1.3、 編寫一個程式,將兩個檔案中的內容合併到一個檔案中。
(這裡只實現了從1和2檔案讀取輸出到3檔案,還不能從1複製到2而不改變2原有的值)
package xiti9; //以位元組流方式,將一個檔案中的資訊複製到另一個檔案 //讀入:程式<-FileInputStream<-檔案(資訊源) //寫出:程式->FileOutputStream->檔案(資訊去向) //未考慮異常處理 import java.io.*; public class xiti9_3 { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub int b = 0; FileInputStream in1 = null,in2 = null; FileOutputStream out = null; //資料來源,用於向程式中讀取資訊 in1 = new FileInputStream("e://source1.txt"); //目標檔案,程式將資訊寫到此檔案中,會自動建立檔案 in2 = new FileInputStream("e://source2.txt"); out = new FileOutputStream("e://dest.txt"); while((b=in1.read())!=-1){//一次讀一個位元組,判斷是否讀到檔案結尾 out.write(b);//一次寫一個位元組 } while((b=in2.read())!=-1){//一次讀一個位元組,判斷是否讀到檔案結尾 out.write(b);//一次寫一個位元組 } in1.close(); in2.close(); out.close(); System.out.println("檔案已複製"); } }
1.4、 程式設計實現以下功能
在螢幕上顯示:輸入姓名,然後將使用者輸入的姓名儲存到文字檔案中,重複進行,直到使用者輸入空字串為止。 package xiti9; import java.io.*; public class xiti9_4 { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub //使用System.in建立InputStreamReader類物件iin InputStreamReader iin = new InputStreamReader(System.in); //建立BufferedReader類物件bin,並關聯到iin BufferedReader bin = new BufferedReader(iin); //或者合併寫成如下 //BufferedReader stdin= new BufferedReader( new InputStreamReader(System.in)); String str; //System.out.println("請輸入姓名:"); //str = bin.readLine(); //建立檔案輸出 FileWriter類物件fw1 FileWriter fw = new FileWriter("e:\\name.txt"); //建立帶緩衝的BufferedWriter類物件bw,並關聯到fw1 BufferedWriter bw = new BufferedWriter(fw); //迴圈讀入字串 while(true){ System.out.println("請輸入姓名: "); //清空輸出緩衝區 System.out.flush(); //讀入輸入的一行 str = bin.readLine(); //若遇到空行則break,結束讀-寫工作 if(str.length()==0)break; //將本行字串寫出到物件bw bw.write(str); //在物件bw中建立新行,為下一行輸出做準備 bw.newLine(); } //關閉輸出物件 bin.close(); bw.close(); } }
1.5、 使用 字元流 程式設計實現以下功能
(1)從鍵盤輸入姓名、學號、成績,並儲存到文字檔案中,重複進行,直到輸入空字串為止
(2)從檔案中讀取各學生的成績,並計算所有學生成績的平均值、最大值和最小值
package xiti9;
import java.io.*;
public class xiti9_5 {
public static void main(String[] args) throws Exception{
InputStreamReader iin = new InputStreamReader(System.in);
BufferedReader bin = new BufferedReader(iin);
String str;
FileWriter fw = new FileWriter("e:\\student.txt");
//建立帶緩衝的BufferedWriter類物件bw,並關聯到fw1
BufferedWriter bw = new BufferedWriter(fw);
//迴圈讀入字串
while(true){
System.out.println("請輸入姓名、學號: ");
//清空輸出緩衝區
System.out.flush();
//讀入輸入的一行
str = bin.readLine();
//若遇到空行則break,結束讀-寫工作
if(str.length()==0)break;
//將本行字串寫出到物件bw
bw.write(str);
//在物件bw中建立新行,為下一行輸出做準備
bw.newLine();
System.out.println("請輸入成績: ");//為了方便提取成績資訊,將其單獨作為一行寫入檔案
System.out.flush();
str = bin.readLine();
if(str.length()==0)break;
bw.write(str);
bw.newLine();
}
//關閉輸出物件
bin.close();
bw.close();
System.out.println("姓名、學號、成績已儲存到文字");
////
//對student.txt檔案的操作
FileReader fr = new FileReader("e:\\student.txt");
BufferedReader bin1 = new BufferedReader(fr);
//建立緩衝BufferedReader物件bin1,關聯到fr
String str2;
str2=bin1.readLine();
double temp=0,ave=0,min=1000,sum=0,max=0;
int linenum=0;//以行數的奇偶判斷成績所在的行
while(str2!=null) {
linenum++;
if(linenum%2==0) {//偶數行為成績
temp = Double.parseDouble(str2);
sum+=temp;//求和
if(min>temp) {
min=temp;
}
if(max<temp) {
max=temp;
}
}
str2=bin1.readLine();
}
ave = sum/(linenum/2);
System.out.println("學生成績的平均值為:"+ave);
System.out.println("學生成績的最大值為:"+max);
System.out.println("學生成績的最小值為:"+min);
}
}