文件IO流
文件與流
內(nèi)存:斷電后所數(shù)據(jù)都丟失,程序結(jié)束后所有變量、對(duì)象都被系統(tǒng)回收
文件:斷電后數(shù)據(jù)不丟失,以文件為單位進(jìn)行操作
根據(jù)流向和數(shù)據(jù)單位可以分成4種流
輸入字節(jié)流
輸出字節(jié)流
輸入字符流
輸出字符流
輸入輸出是站在內(nèi)存的角度,讀寫(xiě)是站在文件的角度
輸入(從內(nèi)存)——讀
輸出——寫(xiě)
操作文件的步驟
讀文件
創(chuàng)建文件和對(duì)象的關(guān)聯(lián)
使用File類(lèi)來(lái)創(chuàng)建文件對(duì)象
創(chuàng)建數(shù)據(jù)流通道
InputStream類(lèi)是所有輸入字節(jié)流的父類(lèi),它是一個(gè)抽象類(lèi)
實(shí)際的文件操作使用FileInputStream類(lèi)來(lái)完成
這個(gè)類(lèi)會(huì)拋出一個(gè)異常FileNotFoundException
讀取文件
int read( ) 每次讀取一個(gè)字節(jié)的數(shù)據(jù),存入返回值中,結(jié)束時(shí)返回-1
int read(byte[] b) 每次讀取b.length個(gè)字節(jié)的數(shù)據(jù),存入數(shù)組b中,結(jié)束時(shí)返回-1
關(guān)閉流通道
close( )
寫(xiě)文件
創(chuàng)建文件的關(guān)聯(lián)
使用File類(lèi)來(lái)創(chuàng)建文件對(duì)象
創(chuàng)建數(shù)據(jù)流通道
OutputStream類(lèi)是所有輸出字節(jié)流的父類(lèi),它是一個(gè)抽象類(lèi)
FileOutputStream類(lèi)來(lái)完成文件的寫(xiě)操作
這個(gè)類(lèi)會(huì)拋出一個(gè)異常FileNotFoundException
當(dāng)寫(xiě)入的文件不存在時(shí),會(huì)先創(chuàng)建文件,再進(jìn)行寫(xiě)入
當(dāng)寫(xiě)入的文件存在時(shí),會(huì)將內(nèi)容清空,再?gòu)念^寫(xiě)入
當(dāng)寫(xiě)入的文件存在時(shí),并且將append參數(shù)設(shè)為true時(shí),數(shù)據(jù)將寫(xiě)入到文件末尾
寫(xiě)入文件
write(int b)
write(byte[] b)
關(guān)閉流通道
close( )
字節(jié)緩沖流
緩沖輸入字節(jié)流 BufferedInputStream
緩沖輸出字節(jié)流 BufferedOutputStream
處理過(guò)程
創(chuàng)建文件和對(duì)象的關(guān)聯(lián)
創(chuàng)建數(shù)據(jù)流通道
基于流通道,創(chuàng)建緩沖流通道
讀/寫(xiě)文件
關(guān)閉流通道
字符流
輸入字符流
Reader類(lèi)是所有輸入字符流的父類(lèi),它是一個(gè)抽象類(lèi)
實(shí)際的文件操作使用FileReader類(lèi)來(lái)完成
輸出字符流
Writer類(lèi)是所有輸出字符流的父類(lèi),它是一個(gè)抽象類(lèi)
實(shí)際的文件操作使用FileWriter類(lèi)來(lái)完成
處理過(guò)程
創(chuàng)建文件和對(duì)象的關(guān)聯(lián)
創(chuàng)建數(shù)據(jù)流通道
讀/寫(xiě)文件
關(guān)閉流通道
結(jié)論:
如果要處理非文本文件,如音頻、視頻、圖片等,使用字節(jié)流
如果要處理文本文件,如.txt文件,使用字符流
字符緩沖流
緩沖輸入字符流
BufferedReader
String readLine() 每次從文件中讀一行文本
緩沖輸出字符流
BufferedWriter
void newLine( ) 向文件中寫(xiě)入1個(gè)空行
字符緩沖流在原有的功能上進(jìn)行了擴(kuò)展
處理過(guò)程
創(chuàng)建文件和對(duì)象的關(guān)聯(lián)
創(chuàng)建數(shù)據(jù)流通道
基于流通道,創(chuàng)建緩沖流通道
讀/寫(xiě)文件
關(guān)閉流通道
異常處理
在文件操作過(guò)程中要處理異常的原因
保證數(shù)據(jù)的完整性
保證資源及時(shí)釋放
保證close會(huì)被執(zhí)行
對(duì)象流
輸入對(duì)象流 ObjectInputStream
Object readObject()
輸出對(duì)象流 ObjectOuputStream
void writeObject(Object obj)
處理過(guò)程
創(chuàng)建文件和對(duì)象的關(guān)聯(lián)
創(chuàng)建數(shù)據(jù)流通道
基于流通道,創(chuàng)建對(duì)象流通道
讀/寫(xiě)文件
關(guān)閉流通道
public static void main(String[] args) throws IOException {
File file =new File("e:/test.txt");
student stu =new student();
//寫(xiě)入對(duì)象
FileOutputStream fo=new FileOutputStream(file);
ObjectOutputStream oo=new ObjectOutputStream(fo);
oo.writeObject(stu);
oo.close();
System.out.println("done");
}
說(shuō)明:要將對(duì)象寫(xiě)入文件,該要實(shí)現(xiàn)Serializable接口
結(jié)論:文件和內(nèi)存是完全不同的使用方式,因此我們不能象使用集合那樣去操作文件中的對(duì)象
對(duì)文件通常進(jìn)行整體處理
寫(xiě)入處理
將多個(gè)對(duì)象保存到集合
將集合一次性的寫(xiě)入文件
讀出處理
將文件讀入一個(gè)集合中
再對(duì)集合中的對(duì)象進(jìn)行操作
打印流
PrintStream
通常用于輸入Log日志
處理過(guò)程
創(chuàng)建文件和對(duì)象的關(guān)聯(lián)
創(chuàng)建數(shù)據(jù)流通道
基于流通道,創(chuàng)建打印流通道
讀/寫(xiě)文件
關(guān)閉流通道
1.delete目錄下全部文件:
file.delete不能刪除非空目錄
public class fileclear { public static void main(String[] args) { File file=new File("E:\\Youku Files\\youkudisk"); delect(file); } public static void delect(File file1){ if(file1.isDirectory()){ File[]files= file1.listFiles(); for (int i = 0; i <files.length ; i++) { System.out.println(files[i]); delect(files[i]); } file1.delete(); }else file1.delete(); } }
編寫(xiě)一個(gè)程序,從文件(文件名鍵盤(pán)輸入)得到該文件保存的10個(gè)正整數(shù),并輸出這10個(gè)整數(shù)的最大值和最小值。
參考答案(Java):
public class GetMaxMin{
public static void main(String[] args) throws Exception {
String file = new Scanner(System.in);
int i, n=10, max=0, min=0 , temp = 0;
try{
Reader in = new FileReader(file);
BufferedReader br=new BufferedReader(new InputStreamReader(in);
max=min=Integer.parseInt(br.readLine( ));
} catch ( Exception e ) {
System.out.println("文件錯(cuò)誤");
}
for ( i = 2 ; i <= n ; i ++ ) {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
temp=Integer.parseInt(br.readLine( ));
if (temp > max ) max=temp;
if (temp < min) min=temp;
}catch( IOException e ) { } ;
}
System.out.println("max="+max+"\nmin="+min);
}
}
評(píng)分標(biāo)準(zhǔn):
1、文件讀取正確可得3分
2、數(shù)據(jù)讀取方法正確可得3分
3、判斷大小正確可得2分
4、循環(huán)正確可得2分