




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第二十講Java輸入輸出流基本要求1理解Java中流的概念掌握字節(jié)流、字符流的使用掌握File類的使用2一、文件類File文件可以分為文本文件、隨機文件和二進制文件,都可通過File類來進行簡單操作。特點:靈活,功能多創(chuàng)建文件流:常用文件名或File類的對象創(chuàng)建文件流。文件過濾:將符合條件的文件選擇出來進行操作,通過接口FileFilter和FilenameFilter來實現(xiàn)。、創(chuàng)建臨時文件、改變文件名、刪除提供對文件進行創(chuàng)建文件等操作提供獲取文件信息的方法,如文件名、文件路徑和文件長度等File類的構(gòu)造方法:public
File(String
pathname)public
File(String
parent,String
child)public
File(File
parent,String
child)public
File(URI
uri)(1)File類的方法1、文件對象public
String
getName(
)public
String
getPath(
)public
String
getAbsolutePath(
)public
String
getParent()public
File
getParentFile(
)2、文件操作public
boolean
renameTo(File
dest)public
boolean
delete()3、獲得文件的屬性public
long
length()public
boolean
exists()public
long
lastMoidfied()4、操作public
boolean
mkdir()public
String[
]
list()public
File[
]
listFiles();34例子:File類中常用方法使用publicclassFileExample{public
static
voidmain(String[]
agrs){Filefile
=newFile("F:\\Java\\10\\FileExample.java");System.out.println("文件或
是否存在:"
+
file.exists());System.out.println("是文件嗎:"
+
file.isFile());System.out.println("是
嗎:"
+
file.isDirectory());System.out.println("名稱:"
+ file
.getName());System.out.println("路徑:
"
+
file.getPath());System.out.println("絕對路徑:
"
+
file.getAbsolutePath());System.out.println("最后修改時間:"
+
file.lastModified());System.out.println("文件大小:"
+
file.length()+
"
字節(jié)");}}5例:File類中常用方法使用import
java.io.File;import
java.util.Date;public
class
File_ex{void
FileInformation(Filef){System.out.println(f.getName());System.out.println(f.getAbsolutePath());System.out.println(f.getParent());System.out.println(f.length());System.out.println(newDate(f.lastModified()));}void
DirectoryInformation(Filed){System.out.println(d.getName());System.out.println(d.getParent());int
i=0;String
lt[]=d.list();while(i<lt.length){System.out.println(lt[i]);i++;}}public
static
void
main(String
args[]){//File
f=new
File("D:/java/","file1.text");File
d=new
File("D:/");//File
d1=new
File("D:/java/");File_ex
fe=new
File_ex();//fe.FileInformation(f);fe.DirectoryInformation(d);//
d1.mkdir();}}二、流的概念java程序通過流來完成輸入/輸出,流是程序中各種信息
的抽象。可以處理文件、內(nèi)存、網(wǎng)絡(luò)數(shù)據(jù)等多種數(shù)據(jù)形式。數(shù)據(jù)流是從源到目的的字節(jié)的有序序列,先進先出,像管道一樣。兩種基本流:InputStream(輸入流)和OutputStream(輸出流)6(1)流式輸入輸出的特點每個數(shù)據(jù)都必須等待排在它前面的數(shù)據(jù)讀入或送出之后才能被讀寫每次讀寫操作處理的都是序列中剩余的未讀寫數(shù)據(jù)中的第一個,而不能隨意選擇輸入輸出的位置Java中流的實現(xiàn)是在java.io包定義的類層次結(jié)構(gòu)完成的。所以要在程序中使用流類,必須java.io包78(2)
Java的標準輸入輸出標準輸入輸出是指在命令行方式下的輸入輸出方式。Java通過System.in、System.out和System.err來實現(xiàn)標準輸入輸出和標準錯誤輸出。每當main方法被執(zhí)行時,就自動生成System.in、System.out和System.err三個對象。System.in是字節(jié)輸入流InputStream類的一個對象,其中有
read方法從鍵盤讀入數(shù)據(jù):public
int
read()
throws
IOExceptionpublic
int
read(byte[
]
b)
throws
IOExceptionSystem.out是流PrintStream類的一個對象,其中print和println方法向屏幕輸出數(shù)據(jù)。System.err是流PrintStream類的一個對象,用于向屏幕輸出錯誤信息9例子:注意異常處理public
class
Demo
{public
static
void
main(String
args[]){byte
buffer[
]=new
byte[200];int
i,d=0,count=0;System.out.print("Input
a
string:
");try{count=System.in.read(buffer);}catch(Exception
e){System.err.println("發(fā)生異常:"+e.toString());}for(i=0;i<=count-1;i++)System.out.print((char)buffer[i]);System.out.println(count);System.out.println("Input ten
char:
");for(i=1;i<=10;i++)try{d=System.in.read();System.out.println((char)d);}catch(Exception
e){System.err.println("發(fā)生異常:"+e.toString());}}}10(3)
Java的數(shù)據(jù)流Java的數(shù)據(jù)流都在java.io包里Java的數(shù)據(jù)流根據(jù)操作的數(shù)據(jù)流分為字節(jié)流和字符流字節(jié)流:流中的數(shù)據(jù)以8位字節(jié)為單位進行讀寫,以InputStream和OutputStream為基礎(chǔ)類。字符流:流中的數(shù)據(jù)以16位字節(jié)為單位進行讀寫,以Reader和Writer為基礎(chǔ)類。三、字節(jié)流InputStream和OutputStream分別是字節(jié)輸入流和字節(jié)輸出流的超類,查看圖。InputStream和OutputStream提供許多用于字節(jié)輸入輸出的方法,包括:數(shù)據(jù)的數(shù)據(jù)的寫入標記位置獲取數(shù)據(jù)量關(guān)閉數(shù)據(jù)流11(1)字節(jié)輸入流InputStream類的層次結(jié)構(gòu)12三個基本read()方法int
read() //讀一個字節(jié)返回int
read(byte[]) //將數(shù)據(jù)讀入byte[],返回讀的字節(jié)數(shù)int
read(byte[],
int
offset,
int
length
)其它方法void
close() //關(guān)閉流。自頂向下關(guān)閉Filter
streamint
available()//返回未讀的字節(jié)數(shù)long
skip(longn) //跳過n個字節(jié)booleanmarkSupported()//測試打開的流是否支持書簽void
mark(int) //標記當前流,并建立int大小緩沖區(qū)void
reset(
) //
返回
出InputStream
常用方法13例子:字節(jié)文件輸入流--FileInputStream//
文件內(nèi)容并顯示在屏幕public
class
Demo{public
static
void
main(String
args[]){try{FileInputStream
rf=newFileInputStream("D:\\mytext.txt");int
b;while((b=rf.read())!=-1)System.out.print((char)b);rf.close();}catch(IOException
ie){System.out.println(ie);}catch(Exceptione){System.out.println(e);}}}14字節(jié)輸出流OutputStream類層次1516OutputStream方法三個基本的write()方法void
write(int)//寫一個字節(jié)void
write(byte[])//寫一個字節(jié)數(shù)組voidwrite(byte[],int
offset,
intlength
)其它方法void
close(
)void
flush()//強行寫入例子:字節(jié)文件輸出流----FileOutputStream//
文件publicclassDemo{public
static
voidmain(String
args[]){try{Filefile=newFile("D:/file2.txt");FileOutputStream
wf=newFileOutputStream(file,true);String
s="向文件中寫入一個字符串";byteb[]=s.getBytes();wf.write(b);wf.close();}catch(Exception
e){e.printStackTrace();}}}17總結(jié):FileInputStream和FileOutputStream實現(xiàn)了對文件的順序,以字節(jié)為單位對文件進行讀寫操作,主要有這樣幾步:創(chuàng)建文件輸入輸出流的對象打開文件用文件讀寫方法讀寫數(shù)據(jù)關(guān)閉數(shù)據(jù)流18四、字符流類Reader是字符輸入流的抽象超類,其提供的方法與InputStream類似,只是將基于Byte的參數(shù)改為基于Char。類Writer是字符輸出流的抽象超類,其提供的方法與OutputStream類似,只是將基于Byte的參數(shù)改為基于Char。Reader和Writer
類實現(xiàn)字節(jié)和字符間的自動轉(zhuǎn)換。每一個
輸入、輸出流,都有相應(yīng)的Reader和Writer版本。19Reader的類層次結(jié)構(gòu)20Reader的基本方法int
read();//讀單個字符int
read(char
cbuf[]);//讀字符放入數(shù)組中int
read(char
cbuf[],int
offset,
int
length);//讀字符放入數(shù)組的指定位置void
close() //關(guān)閉流。long
skip(long
n) //跳過n個字符boolean
markSupported(
)
//測試打開的流是否支持書簽void
mark(int) //標記當前流,并建立int大小緩沖區(qū)void
reset(
) //
返回
出boolean
ready() //測試當前流是否準備好進行讀21Writer的類層次結(jié)構(gòu)2223Writer的基本方法int
write(int
c);//寫單個字符int
write(char
cbuf[]);//寫字符數(shù)組int
write(char
cbuf[],
int
offset,
int
length)
;int
write(String
str)
;int
write(String
str,
int
offset,
int
length)
;void
close(
)void
flush()//強行寫入24例:從鍵盤輸入文字存入文件,再讀出加上行號后打印在屏幕//字符緩沖流:BufferedReader和BufferedWriter,以緩沖區(qū)方式對數(shù)據(jù)進行輸入輸出。public
class
Demo{public
static
void
main(String
[]args){String
f="d:\\file2.txt";String
str="";int
i=0;try{BufferedReader
keyIn=new
BufferedReader(new
InputStreamReader(System.in));BufferedWriter
bw=new
BufferedWriter(new
FileWriter(f));BufferedReader
br
=
new
BufferedReader(new
FileReader(f));System.out.println("Please
input
file
text:");while(!(str=keyIn.readLine()).equals("exit")){bw.write(str,0,str.length());bw.newLine();}bw.close();while((str=br.readLine())!=null){i++;System.out.println(i+":
"+str);}}catch(IOException
e){
}}}總結(jié):字節(jié)流與字符流的比較Reader
和InputStream以及Writer與
OutputStream定義的API類似,但操作的數(shù)據(jù)類型不同。所有的流——InputStream、OutputStream
、Reader、
Writer
在創(chuàng)建時自動打開;程序中可以調(diào)用close方法關(guān)閉流,否則Java運行環(huán)境的
收集器將隱含將流關(guān)閉。2526輸入輸出流類分類I/O
StreamsType
ofI/OStreamsDescriptionMemoryCharArrayReaderCharArrayWriterByteArrayInputStreamByteArrayOutputStream從/向內(nèi)存數(shù)組讀寫數(shù)據(jù).StringReaderStringWriterStringBufferInputStream從/向內(nèi)存字符串讀寫數(shù)據(jù)PipePipedReaderPipedWriterPipedInputStreamPipedOutputStream實現(xiàn)管道的輸入和輸出FileFileReaderFileWriterFileInputStreamFileOutputStream統(tǒng)稱為文件流。對文件進行讀、寫操作27I/O
StreamsTypeofI/OStreamsDescriptionObjectSerializationObjectInputStreamObjectOutputStream對象的輸入、輸出DataConversionDataInputStreamDataOutputStream讀、寫基本數(shù)據(jù)類型PrintingPrintWriterPrintStream包含方便的打印方法BufferingBufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStream在讀入或?qū)懗鰰r,對數(shù)據(jù)進行緩存,以減少I/O的次數(shù)。I/O
StreamsType
ofI/OStreamsDescriptionFilteringFilterReaderFilterWriterFilterInputStreamFilterOutputStream過濾流,在數(shù)據(jù)進行讀或?qū)憰r進行過濾。ConcatenationSequenceInputStream把多個輸入流連接成一個輸入流CountingLineNumberReaderLineNumberInputStream在讀入數(shù)據(jù)時對行記數(shù)Peeking
AheadPushbackReaderPushbackInputStream通過緩存機制,進行預(yù)讀Converting
betweenBytes
and
CharactersInputStreamReaderOutputStreamWriter按照一定的編碼/
標準將字節(jié)流轉(zhuǎn)換為字符流,或進行反向轉(zhuǎn)換。28五、RandomAccessFile類FileInputStream、FileOutputStream、FileReader和FileWriter流只能完成單一的功能,要么只能
,要么只能寫入。Java還提供了專門用來處理文件輸入輸出功能更加完善的RandomAccessFile流當想對一個文件進行讀寫操作時,就可以創(chuàng)建一個指向該文件的RandomAccessFile流即可,這樣既可以從這個流中獲取文件信息,也可以向這個流中寫入信息。29例子:參考P334例import
java.io.*;public
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇州科技大學天平學院《商務(wù)英語技巧2》2023-2024學年第二學期期末試卷
- 某地產(chǎn)金域藍灣智能化系統(tǒng)方案
- 礦山電氣設(shè)備維護與故障排除考核試卷
- 無機鹽在制藥工業(yè)的應(yīng)用考核試卷
- 電子產(chǎn)品的環(huán)境適應(yīng)性測試考核試卷
- 木片加工中的節(jié)能減排技術(shù)考核試卷
- 國際醫(yī)療健康金融支持服務(wù)考核試卷
- 電視機量子點顯示技術(shù)的研究與應(yīng)用考核試卷
- 生物技術(shù)在疾病早期診斷中的應(yīng)用考核試卷
- 漁業(yè)政策與漁業(yè)經(jīng)濟發(fā)展關(guān)系研究考核試卷
- 現(xiàn)金盤點表完整版
- 2022年鄭州軌道工程職業(yè)學院單招職業(yè)適應(yīng)性測試試題及答案解析
- 接觸網(wǎng)驗收標準
- 地鐵16號線風閥設(shè)備安裝手冊
- 新《危險化學品安全管理條例》課件
- 中醫(yī)科物理治療登記表
- 高山下的花環(huán)
- 中醫(yī)望色望神圖集共59張課件
- 《跋傅給事帖》2020年浙江嘉興中考文言文閱讀真題(含答案與翻譯)
- 物業(yè)小區(qū)保潔清潔方案
- 銀行從業(yè)資格考試題庫附參考答案(共791題精心整理)
評論
0/150
提交評論