第八章javaio包課件_第1頁
第八章javaio包課件_第2頁
第八章javaio包課件_第3頁
第八章javaio包課件_第4頁
第八章javaio包課件_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

java.io包第八章使用Data類和Calendar類獲取當前系統(tǒng)時間及日期使用Random類對象生成隨機數理解Java中的集合框架使用ArrayList類創(chuàng)建動態(tài)數組使用HashMap類創(chuàng)建鍵值對集合使用LinkedList類創(chuàng)建鏈表Vector類回顧本章相關詞匯單詞說明input輸入output輸出file文件,檔案directory目錄stream流write寫,書寫read讀,閱讀source源頭,來源destination目標,目的地本章目標了解java.io包運用File類對文件或目錄的屬性進行操作理解流,理解輸入/輸出流的概念運用FileInputStream類和FileOutputStream類讀/寫字節(jié)文件運用FileReader類和FileWriter類配合BufferedReader類和BufferedWriter類讀/寫字符文件使用BufferedReader類從控制臺接受輸入運用DataInputStream類和DataOutputStream類讀寫數據文件java.io包簡介java.io包也是Java內置的包,其中包含一系列對文件和目錄的屬性進行操作,對文件進行讀寫操作的類;程序中如果要使用到該包中的類,對文件或流進行操作,則必須顯式地聲明如下語句:

importjava.io.*;文件什么是文件? 文件可以認為是相關記錄或存放在一起的數據的集合;文件一般是存放在磁盤上的,例如:硬盤、軟盤和光盤等等。File類File類的對象不但可以表示文件,還可以表示目錄,在程序中一個File類對象可以代表一個文件或目錄;當創(chuàng)建一個文件對象后,就可以利用它來對文件或目錄的屬性進行操作,如:文件名、最后修改日期、文件大小等等;需要注意的是,F(xiàn)ile對象并不能直接對文件進行讀/寫操作,只能查看文件的屬性;File類的構造方法File類的構造方法有4種重載方式,常用的如下:如:

//在當前目錄下創(chuàng)建一個與aaa.txt文件名相關聯(lián)的文件對象

Filef1=newFile("aaa.txt");

//指明詳細的路徑以及文件名,請注意雙斜線

Filef2=newFile("D:\\Java\\Hello.java");構造方法說明File(Stringpathname)指定文件(或目錄)名和路徑創(chuàng)建文件對象File類中的常用方法方法原型說明booleanexists()判斷文件是否存在,存在返回true,否則返回falsebooleanisFile()判斷是否為文件,是文件返回true,否則返回falsebooleanisDirectory()判斷是否為目錄,是目錄返回true,否則返回falseStringgetName()獲得文件的名稱StringgetAbsolutePath()獲得文件的絕對路徑longlength()獲得文件的長度(字節(jié)數)booleancreateNewFile()throwsIOException創(chuàng)建新文件,創(chuàng)建成功返回true,否則返回false,有可能拋出IOException異常,必須捕捉booleandelete()刪除文件,刪除成功返回true,否則返回falseFile類示例public

classFileDemo{

public

static

voidmain(String[]args){

//創(chuàng)建一個文件對象,使之與一個文件關聯(lián)

Filefile=newFile("test.txt");

//顯示與文件有關的屬性信息

System.out.println("文件或目錄是否存在:"+file.exists());System.out.println("是文件嗎:"+file.isFile());System.out.println("是目錄嗎:"+file.isDirectory());System.out.println("名稱:"+file.getName());System.out.println("絕對路徑:"+file.getAbsolutePath());System.out.println("最后修改時間:"+file.lastModified());System.out.println("文件大小:"+file.length());}}stream(流)流是指一連串流動的數據信號,是以先進先出的方式發(fā)送和接收數據的通道?!瓵’‘B’‘C’‘D’‘E’‘F’InputStream來自數據源的數據流OutputStream流向目的地的數據流流(續(xù))流的類型根據流動方向的不同,流分為輸入流和輸出流;對于輸入和輸出流,由于傳輸格式的不同,又分為字節(jié)流和字符流:字節(jié)流是指8位的通用字節(jié)流,以字節(jié)為基本單位,在java.io包中,對于字節(jié)流進行操作的類大部分繼承于InputStream(輸入字節(jié)流)類和OutputStream(輸出字節(jié)流)類;字符流是指16位的Unicode字符流,以字符(兩個字節(jié))為基本單位,非常適合處理字符串和文本,對于字符流進行操作的類大部分繼承于Reader(讀取流)類和Writer(寫入流)類。使用FileInputStream類讀文件FileInputStream類稱為文件輸入流,繼承于InputStream類,是進行文件讀操作的最基本類;它的作用是將文件中的數據輸入到內存中,我們可以利用它來讀文件;由于它屬于字節(jié)流,因此在讀取Unicode字符(如中文)的文件時可能會出現(xiàn)問題。FileInputStream類的構造方法FileInputStream類的構造方法有3種重載方式,以下是常用的幾種。構造方法說明FileInputStream(Filefile)throwsFileNotFoundException使用File對象創(chuàng)建文件輸入流對象,如果文件打開失敗,將拋出異常FileInputStream(Stringname)throwsFileNotFoundException使用文件名或路徑創(chuàng)建文件輸入流對象,如果文件打開失敗,將拋出異常FileInputStream類的常用方法方法原型說明intread()throwsIOException讀取文件中的數據,一次讀取一個字節(jié),讀取的數據作為返回值返回,如果讀到文件末尾則返回-1,有可能拋異常,必須捕捉intread(byte[]b)throwsIOException讀取文件中的數據,將讀到的數據存放到byte型數組中,并返回讀取的字節(jié)的數量,未讀到數據返回-1,有可能拋異常,必須捕捉voidclose()throwsIOException關閉流對象,有可能拋異常,必須捕捉FileInputStream對象讀文件示例1public

classFileInputStreamDemo1{

public

static

voidmain(String[]args){

try{Filefile=newFile("test.txt");//創(chuàng)建文件對象

//使用文件對象創(chuàng)建文件輸入流對象,相當于打開文件

FileInputStreamfis=newFileInputStream(file);

for(inti=0;i<file.length();i++){

charch=(char)(fis.read());//循環(huán)讀取字符

System.out.print(ch);}System.out.println();fis.close();//關閉流

}catch(FileNotFoundExceptionfnfe){System.out.println("文件打開失敗。");}catch(IOExceptionioe){ioe.printStackTrace();}}}FileInputStream對象讀文件示例2public

classFileInputStreamDemo2{

public

static

voidmain(String[]args){

try{Filefile=newFile("test.txt");//創(chuàng)建文件對象

FileInputStreamfis=newFileInputStream(file);

//根據文件的字節(jié)長度創(chuàng)建字節(jié)數組

byte[]buf=new

byte[(int)(file.length())];fis.read(buf);//讀取文件中的數據存放到字節(jié)數組中

Stringstr=newString(buf);//利用字節(jié)數組創(chuàng)建字符串

System.out.println(str);//打印字符串

fis.close();//關閉流

}catch(FileNotFoundExceptionfnfe){System.out.println("文件打開失敗。");}catch(IOExceptionioe){ioe.printStackTrace();}}}使用FileOutputStream類寫文件FileOutputStream類稱為文件輸出流,繼承于OutputStream類,是進行文件寫操作的最基本類;它的作用是將內存中的數據輸出到文件中,我們可以利用它來寫文件。FileOutputStream類的構造方法FileOutputStream類的構造方法有5種重載方式,以下是常用的幾種。構造方法說明FileOutputStream(Filefile)throwsFileNotFoundException使用File對象創(chuàng)建文件輸出流對象,如果文件打開失敗,將拋出異常FileOutputStream(Filefile,booleanappend)throwsFileNotFoundException使用File對象創(chuàng)建文件輸出流對象,并由參數append指定是否追加文件內容,true為追加,false為不追加,異常情況同上FileOutputStream(Stringname)throwsFileNotFoundException直接使用文件名或路徑創(chuàng)建文件輸出流對象,異常情況同上FileOutputStream(Stringname,booleanappend)throwsFileNotFoundException直接使用文件名或路徑創(chuàng)建文件輸出流對象,并由參數append指定是否追加,異常情況同上FileOutputStream類的常用方法方法原型說明voidwrite(intb)throwsIOException往文件中寫數據,一次寫一個字節(jié),有可能拋異常,必須捕捉voidwrite(byte[]b)throwsIOException往文件中寫數據,將byte數組中的數據全部寫入到文件中,有可能拋異常,必須捕捉voidclose()throwsIOException關閉流對象,有可能拋異常,必須捕捉FileOutputStream對象寫文件示例1public

classFileOutputStreamDemo1{

//在函數內部不進行異常處理,將異常拋出函數外部

public

static

voidmain(String[]args)throwsIOException{Stringstr="Helloworld!";Filefile=newFile("test.txt");//創(chuàng)建文件對象

//通過文件對象創(chuàng)建文件輸出流對象

//附加第二個參數true,指定進行文件追加,默認為不追加

FileOutputStreamfos=newFileOutputStream(file,true);

//逐個將字符寫入到文件中

for(inti=0;i<str.length();i++){fos.write(str.charAt(i));}fos.close();//關閉流

}}FileOutputStream對象寫文件示例2public

classFileOutputStreamDemo2{

//在函數內部不進行異常處理,將異常拋出函數外部

public

static

voidmain(String[]args)throwsException{Stringstr="ILoveJava";

//通過文件名創(chuàng)建文件輸出流對象

FileOutputStreamfos=newFileOutputStream("test.txt");

//將字符串轉化為字節(jié)數組

byte[]buffer=str.getBytes();

//將字節(jié)數組中包含的數據一次性寫入到文件中

fos.write(buffer);

//關閉流

fos.close();}}FileInputStream/FileOutputStream小結FileInputStream類和FileOutputStream類是成對出現(xiàn)的,一個進行輸入(讀文件)操作,一個進行輸出(寫文件)操作;由于采用字節(jié)方式進行數據傳輸,不必考慮數據的格式問題,這兩個類對文件操作的效率較高;可以使用這兩個類完成復制文件的操作。復制文件示例public

classCopyFileDemo{

public

static

voidmain(String[]args)throwsIOException{FilesrcFile=newFile("src.dat");//源文件對象

FiledestFile=newFile("dest.dat");//目標文件對象

if(!(destFile.exists())){//判斷目標文件是否存在

destFile.createNewFile();//如果不存在則創(chuàng)建新文件

}

//使用源文件對象創(chuàng)建文件輸入流對象

FileInputStreamfis=newFileInputStream(srcFile);

//使用目標文件對象創(chuàng)建文件輸出流對象

FileOutputStreamfos=newFileOutputStream(destFile);

byte[]buf=new

byte[1024];//創(chuàng)建字節(jié)數組,作為臨時緩沖

System.out.println("開始復制文件...");

while(fis.read(buf)!=-1){//循環(huán)從文件輸入流中讀取數據

fos.write(buf);//寫入到文件輸出流中

}System.out.println("文件復制成功!");fis.close();//關閉流

fos.close();}}

字符流FileInputStram類和FileOutputStream類雖然可以高效率地讀/寫文件,但對于Unicode編碼的文件,使用它們有可能出現(xiàn)亂碼;考慮到Java是跨平臺的語言,要經常操作Unicode編碼的文件,使用字符流操作文件是有必要的;使用字符流將涉及到以下4個類:FileReader類和FileWriter類;BufferedReader類和BufferedWriter類。FileReader類FileReader類稱為文件讀取流,允許以字符流的形式對文件進行讀操作,其構造方法有3種重載方式,以下是常用的幾種:該類將從文件中逐個地讀取字符,效率比較低下,因此一般將該類對象包裝到緩沖流中進行操作。構造方法說明FileReader(Filefile)throwsFileNotFoundException使用File對象創(chuàng)建文件讀取流對象,如果文件打開失敗,將拋出異常FileReader(Stringname)throwsFileNotFoundException使用文件名或路徑創(chuàng)建文件讀取流對象,如果文件打開失敗,將拋出異常BufferedReader類BufferedReader類主要為字符流提供緩沖,以提高效率,其構造方法有2種重載方式,以下是常用的幾種:以下是BufferedReader類的常用方法:構造方法說明BufferedReader(Readerin)將字符讀取流對象包裝成緩沖讀取流對象方法原型說明StringreadLine()throwsIOException從緩沖讀取流中讀取一行字符,以字符串的形式返回,有可能拋異常,必須捕捉voidclose()throwsIOException關閉流對象,有可能拋異常,必須捕捉FileReader配合BufferedReader讀文件示例public

classRraderDemo{

public

static

voidmain(String[]args)throwsIOException{Filefile=newFile("test.txt");

//通過文件對象創(chuàng)建文件讀取流對象

FileReaderfr=newFileReader(file);

//將文件讀取流包裝成緩沖讀取流

BufferedReaderbr=newBufferedReader(fr);

Stringstr;

while((str=br.readLine())!=null)//逐行讀取數據

{System.out.println(str);}br.close();//關閉流

fr.close();//關閉流

}}FileWriter類FileWriter類稱為文件寫入流,以字符流的形式對文件進行寫操作,其構造方法有5種重載,以下是常用的幾種:與FileReader類相似,F(xiàn)ileWriter類同樣需要使用緩沖流進行包裝。構造方法說明FileWriter(Filefile)throwsIOException使用File對象創(chuàng)建文件寫入流對象,如果文件打開失敗,將拋出異常,必須捕捉FileWriter(Filefile,booleanappend)throwsIOException使用File對象創(chuàng)建文件寫入流對象,并由參數append指定是否追加,異常情況同上FileWriter(Stringname)throwsIOException直接使用文件名或路徑創(chuàng)建文件寫入流對象,異常情況同上FileWriter(Stringname,booleanappend)throwsIOException直接使用文件名或路徑創(chuàng)建文件寫入流對象,并由參數append指定是否追加,異常情況同上BufferedWriter類BufferedWriter類可以為FileWriter類提供緩沖,其構造方法有2種重載方式,以下是常用的幾種:以下是BufferedWriter類的常用方法:構造方法說明BufferedWriter(Writerout)將字符寫入流對象包裝成緩沖寫入流對象方法原型說明voidwrite(Stringstr)throwsIOException將一行字符串寫入到緩沖寫入流中,有可能拋異常,必須捕捉voidnewLine()throwsIOException將一個回車換行符寫入到文件中,從而達到換行的效果,有可能拋異常,必須捕捉FileWriter配合BufferedWriter寫文件示例public

classWriterDemo{

public

static

voidmain(String[]args)throwsIOException{Filefile=newFile("test.txt");

//通過文件對象創(chuàng)建文件輸出字符流對象

FileWriterfw=newFileWriter(file);

//將文件輸出字符流包裝成緩沖流

BufferedWriterbw=newBufferedWriter(fw);bw.write("大家好!");bw.write("我正在學習Java。");bw.newLine();//換個新行

bw.write("請多多指教。");bw.newLine();//換新行

bw.write("Luckybug@21");bw.close();//關閉流

fw.close();//關閉流

}}從控制臺接受輸入System.in的read方法可以從控制臺接受輸入;但由于in實際上是一個InputStream類的對象,它只能以字節(jié)形式接收數據,并且一次只能接受一個字節(jié),這使輸入操作很不便;必須將System.in進行處理,才可以順利地從控制臺接受輸入,這將使用到:InputStreamReader類BufferedReader類轉換和包裝System.inInputStreamReader類用于將InputStream類型的字節(jié)輸入流對象轉換成Reader類型的字符讀取流對象;其構造方法有4種重載方式,常用的如下:可以使用它來轉換System.in,如:

InputStreamReaderisr=newInputStreamReader(System.in);這樣的字符流效率很低,再使用BufferedReader類來為其建立緩沖,如:

BufferedReaderbr=newBufferedReader(isr);這樣,就可以從控制臺接受輸入了。構造方法說明InputStreamReader(InputStreamin)將InputStream對象轉換成Reader對象從控制臺接受輸入示例public

classConsoleInputDemo{

public

static

voidmain(String[]args)throwsIOException{

//將System.in轉化成字符流對象

InputStreamReaderisr=newInputStreamReader(System.in);

//用緩沖流進行包裝

BufferedReaderbr=newBufferedReader(isr);

System.out.println("請輸入您的姓名:");Stringname=br.readLine();//接受輸入

System.out.println("請輸入您的年齡:");

intage=Integer.parseInt(br.readLine());//接受輸入

System.out.println("您的姓名:"+name);System.out.println("您的年齡:"+age);

br.close();//關閉流

isr.close();//關閉流

}}從控制臺輸入并寫入到文件示例/*本例從控制臺接受輸入,然后寫入到文件中,直到用戶輸入"!!!"為止*/Filefile=newFile("input.txt");//創(chuàng)建文件對象if(!file.exists())//判斷該文件是否存在,如果不存在則創(chuàng)建新文件{file.createNewFile();}FileWriterfr=newFileWriter(file);//針對文件對象創(chuàng)建文件寫入流對象BufferedWriterbw=newBufferedWriter(fr);//為文件寫入流建立緩沖流//將控制臺輸入對象轉化成字符流,并建立緩沖流BufferedReaderbin=newBufferedReader(newInputStreamReader(System.in));Stringstr=bin.readLine();//接受從控制臺輸入的一行字符串while(!(str.equals("!!!")))//如果輸入"!!!"則代表輸入結束{bw.write(str);//將從控制臺輸入的字符串寫入到文件中

bw.newLine();//換新行

str=bin.readLine();//再從控制臺接受輸入}//關閉所有已經打開的流bw.close();fr.close();bin.close();基本數據類型的讀/寫FileInputStream和FileOutputStream在讀寫文件時不考慮數據的類型;FileWriter和FileReader在讀寫文件時,將所有的數據都看做字符;但有時候,我們需要將各種類型的數據寫入文件或是從文件中讀取,DataInputStream類和DataOutputStream類可以滿足需要。DataInputStream類DataInputStream類可以輸入任何類型的數據,但它不可以單獨使用,需要要配合其它字節(jié)輸入流一起使用;DataInputStream類的構造方法只有一種方式:如:

//將文件輸入流包裝成數據輸入流,以便從文件中讀取各種類型的數據

FileInputStreamfis=newFileInputStream("data.dat"); DataInputStreamdis=newDataInputStream(fis);構造方法說明DataInputStream(InputStreamin)利用其它的字節(jié)輸入流創(chuàng)建數據輸入流對象DataInputStream類的常用方法方法原型說明finalbooleanreadBoolean()throwsIOException從數據輸入流中讀取一個boolean型數據finalcharreadChar()throwsIOException從數據輸入流中讀取一個char型數據finalintreadInt()throwsIOException從數據輸入流中讀取一個int型

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論