java課件11java io2學(xué)時計算機學(xué)院軟件工程系_第1頁
java課件11java io2學(xué)時計算機學(xué)院軟件工程系_第2頁
java課件11java io2學(xué)時計算機學(xué)院軟件工程系_第3頁
java課件11java io2學(xué)時計算機學(xué)院軟件工程系_第4頁
java課件11java io2學(xué)時計算機學(xué)院軟件工程系_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、主講教師 張 智計算機學(xué)院軟件工程系11 Java IO11.1 控制臺I/O11.2 文件類11.3 Java I/O流11.1 控制臺I/Ojava.lang.System支持控制臺I/O。System.out 是一個PrintStream對象,它指向運行Java應(yīng)用程序的終端窗口。System.in 是一個InputStream對象,它指向用戶的鍵盤。System.err 是一個PrintStream對象,它指向運行Java應(yīng)用程序的終端窗口,用于出錯信息的輸出。輸入輸出示例import java.io.*;public class test public static void mai

2、n(String args) String s; InputStreamReader isr = new InputStreamReader( System.in ); BufferedReader br = new BufferedReader( isr ); System.out.print(請輸入str ); trys = br.readLine( ); System.out.println(你輸入了: + s);br.close(); /關(guān)閉輸入流 catch(IOException e) e.printStackTrace(); 【Return】字節(jié)流封裝成字符流字符流緩沖11.2

3、文件類File類的對象可以代表一個具體的文件路徑,可以使用絕對路徑也可以使用相對路徑。絕對路徑如:d:javatestHello.java相對路徑如:testHello.java File對象用法示例 (windows文件系統(tǒng))File f1 = new File(d:test1.txt); /絕對路徑File f2 = new File(1.txt); /相對路徑File f3 = new File(e:abc); /文件夾(也是文件路徑)File f4 = new File(d:test, 1.txt); /父路徑+子路徑結(jié)合File myFile = new File(C: + File

4、.separator + jdk1.5.0 + File.separator+File.java);較安全建立文件的方法File類常用方法 文件名相關(guān)String getName():獲得當(dāng)前文件或文件夾的名稱。例如c:test1.t,則返回1.t。String getPath():獲得當(dāng)前對象的路徑名。例如c:test1.t,則返回c:test1.t。String getAbsolutePath():獲得當(dāng)前文件或文件夾的絕對路徑。例如c:test1.t,則返回c:test1.t。String getParent():獲得當(dāng)前路徑中的父路徑。例如c:test1.t則,返回c:test。boo

5、lean renameTo(File newName):修改文件名。放在示例中看文件測試相關(guān)boolean exists():當(dāng)前文件或文件夾是否存在。boolean canRead():當(dāng)前文件或文件夾是否可讀。boolean canWrite():當(dāng)前文件或文件夾是否可寫。boolean isFile():當(dāng)前File對象是否是文件。boolean isDirectory():當(dāng)前File對象是否是目錄。boolean isAbsolute():當(dāng)前File對象路徑是否為絕對路徑。通用文件信息和工具boolean createNewFile():創(chuàng)建指定的文件(不能用于創(chuàng)建文件夾),且文件

6、路徑中包含的文件夾必須存在。boolean delete():刪除當(dāng)前文件或文件夾(文件夾必須為空)。long lastModified():返回文件的最后修改時間,long類型呵呵。long length():返回文件存儲時占用的字節(jié)數(shù) (實際大小) 。目錄工具boolean mkdir():創(chuàng)建文件夾(父路徑上的文件夾必須存在),而不創(chuàng)建該路徑中的其它文件夾。成功則true,否false。boolean mkdirs():創(chuàng)建文件夾,父目錄不存在時,也會自動根據(jù)需要創(chuàng)建。String list():返回當(dāng)前文件夾下所有的文件名和文件夾名稱 (不是絕對路徑) 。File listFiles(

7、):返回當(dāng)前文件夾下所有的文件對象。新建目錄public static void newFolder(String folderPath) File myFilePath =new File(folderPath); if (!myFilePath.exists() boolean flag=myFilePath.mkdir(); / or mkdirs() if (flag) System.out.println(新建目錄操作成功); else System.out.println(新建目錄操作失敗); 調(diào)用示例:newFolder(e:abc);newFolder(e:abc123);父路

8、徑中包含的文件夾必須存在新建文件public static void newFile(String filePathAndName, String fileContent) try File myFilePath = new File(filePathAndName); if (!myFilePath.exists() myFilePath.createNewFile(); FileWriter resultFile = new FileWriter(myFilePath); PrintWriter myFile = new PrintWriter(resultFile); myFile.pr

9、intln(fileContent); myFile.close(); resultFile.close(); System.out.println(新建文件操作成功!); catch (IOException e) System.out.println(新建文件操作出錯!); e.printStackTrace(); fileContent為文件內(nèi)容關(guān)于FileWriter參考11.3節(jié)調(diào)用示例: newFile(e:abc1.txt,abc);路徑中包含的文件夾必須存在刪除文件public static void delFile(String filePathAndName) File m

10、yDelFile =new File(filePathAndName); boolean flag=myDelFile.delete(); if(flag) System.out.println(刪除文件操作成功!); else System.out.println(刪除文件操作出錯!); 調(diào)用示例:delFile(e:abc1.txt);練習(xí)-顯示所有文件和文件夾public static void listFiles(String filePath) File path=new File(filePath);String list=path.list();System.out.printl

11、n(文件和文件夾總數(shù):+list.length);for(String s:list) System.out.println(s);【Return】11.3 Java I/O流流的概念流是Java內(nèi)存中的一組有序數(shù)據(jù)序列。Java中對文件的操作是以流的方式進行的。Java將數(shù)據(jù)從源(文件、內(nèi)存、鍵盤、網(wǎng)絡(luò))讀入到內(nèi)存中,形成了流,然后還可以將這些流寫到另外的目的地(文件、內(nèi)存、控制臺、網(wǎng)絡(luò))。 Java的流分類按照輸入的方向(參照對象是Java程序):輸入流和輸出流。按照處理數(shù)據(jù)的單位:字節(jié)流和字符流。字符流通常是文本文件,一般與機器直接交互的輸入輸出都是二進制字節(jié)流。按照功能的不同分:節(jié)點流

12、和處理流,節(jié)點流是直接從一個源讀寫數(shù)據(jù)的流(這個流沒有經(jīng)過包裝和修飾),處理流是在對節(jié)點流封裝的基礎(chǔ)上的一種流。(重點和難點)I/O類結(jié)構(gòu)(字符流)I/O類結(jié)構(gòu)(字節(jié)流)如何理解不管流的分類是多么復(fù)雜,其根源來自于四個基本的類(基本流):進行字節(jié)流到字符流的轉(zhuǎn)換,通常用字符流類:InputStreamReader、OutputStreamWriter實現(xiàn)。從字節(jié)流和字符流的緩沖容器來看有byte和char之分,所以派生出: ByteArrayInputStream / ByteArrayOutputStream CharArrayInputStream / CharArrayOutputStr

13、eam CharArrayReader / CharArrayWriter字節(jié)流字符流輸入流InputStreamReader輸出流OutputStreamWriter如何理解(續(xù))以上類只是流的表示形式,而在傳輸形式上通常還會再封裝成緩沖流(處理流) :BufferedInputStream / BufferedOutputStream 字節(jié)緩沖流BufferedReader / BufferedWriter 字符緩沖流每一個頂層類都有對目錄文件(File)的支持,實現(xiàn)對文件的讀取操作: FileInputStream / FileOutputStream 以字節(jié)流形式讀取文件 FileRe

14、ader / FileWriter 以字符流形式讀取文件(文本文件)緩沖流可獲得更高的讀取效率(如按行讀寫)示例從鍵盤讀入一行數(shù)據(jù)讀文件:從文件中逐行讀取數(shù)據(jù)顯示在屏幕上。寫文件:從鍵盤讀入數(shù)據(jù)行寫入文件中。 示例1:從鍵盤讀入一行數(shù)據(jù)trySystem.out.print(請輸入: );BufferedReader br =new BufferedReader( new InputStreamReader( System.in ) ); String s = br.readLine( ); /讀取一行System.out.println(你輸入了: + s); br.close(); cat

15、ch(IOException e)e.printStackTrace();詳解見后頁詳解工作流程trySystem.out.print(請輸入: );InputStream is=System.in; / System.in是鍵盤輸入的字節(jié)流 InputStreamReader isr=new InputStreamReader(is); /將輸入的字節(jié)流轉(zhuǎn)換為字符流 BufferedReader br=new BufferedReader(isr); /將字符流封裝為字符緩沖流(效率更高)String s = br.readLine( ); /讀取一行System.out.println(你

16、輸入了: + s); br.close(); isr.close(); is.close();catch(IOException e)e.printStackTrace();System.in轉(zhuǎn)換為字符流讀取字節(jié)流InputStreamInputStreamReader封裝為字符緩沖流BufferedReaderreadLine合為一句BufferedReader br =new BufferedReader(new InputStreamReader(System.in);利用InputStream讀取鍵盤輸入的字節(jié)流System.in,然后通過InputStreamReader將輸入的字節(jié)

17、流轉(zhuǎn)換為字符流,此時的字符流處理效率不高,因此再通過BufferedReader將該字符流封裝為讀取效率更高的字符緩沖流。 補充:BufferedReader.read() 讀取一個字符,返回其unicode編碼值(整型,0-65535),如果讀到流的末尾則返回-1?;居梅ǎ篿nt c;while(c=br.read()!=n) /一次只讀取一個字符直至回車結(jié)束 System.out.print( (char)c );如果用while(c=br.read()!= -1 )則可讀取多行,直到Ctrl+Z結(jié)束輸入流【Return】示例2:讀文件從文件中逐行讀取數(shù)據(jù)顯示在屏幕上。 方法1:以讀文件

18、字節(jié)流FileInputStream開始,要將字節(jié)流轉(zhuǎn)換成字符流。tryFileInputStream fis = new FileInputStream(d:/1/1.txt); /定義一個文件字節(jié)流 InputStreamReader isr = new InputStreamReader(fis); /將字節(jié)流轉(zhuǎn)換成字符流 BufferedReader br = new BufferedReader(isr); /將字符流轉(zhuǎn)換成緩存流String s=; String ss =; while(s = br.readLine()!= null) /一次讀取一行ss += s+n; br.c

19、lose(); isr.close(); fis.close();System.out.print(ss);catch(IOException e) e.printStackTrace();轉(zhuǎn)換為字符流讀取文件字節(jié)流FileInputStreamInputStreamReader封裝為字符緩沖流BufferedReaderreadLine方法2:以讀文件字符流FileReader開始,無需字節(jié)流到字符流的轉(zhuǎn)換。tryBufferedReader br = new BufferedReader(new FileReader(d:11.txt); String s=; String ss =;wh

20、ile(s = br.readLine()!= null) ss+=s+n; br.close(); System.out.print(ss);catch(IOException e)e.printStackTrace();讀取文件字符流 FileReader封裝為字符緩沖流BufferedReaderreadLine一個字符一個字符的讀取:int c;while(c=br.read()!=-1) /-1表示到文件末尾 System.out.print ( (char)c );【Return】示例3:寫文件從鍵盤讀入數(shù)據(jù)行寫入文件中。方法1:以寫文件字節(jié)流FileOutputStream開始t

21、rySystem.out.println(請輸入文件內(nèi)容,以Ctrl+Z結(jié)束:);FileOutputStream fos = new FileOutputStream(d:/1/1.txt); /定義一個文件字節(jié)流(輸出型)OutputStreamWriter osw= new OutputStreamWriter(fos); /將字節(jié)流轉(zhuǎn)換成字符流BufferedWriter bw = new BufferedWriter(osw); /封裝為緩沖流(輸出型)BufferedReader br=new BufferedReader(new InputStreamReader(System.

22、in); /創(chuàng)建字符流緩沖(輸入型)String s=;while(s = br.readLine() != null ) bw.write(s); /將BufferedReader信息寫入BufferedWriter,最終寫入文件 bw.newLine(); /換行 或者bufferedWriter.write(rn); System.out.println(文件已保存); br.close(); bw.close(); osw.close(); fos.close(); catch(IOException e) e.printStackTrace(); System.in轉(zhuǎn)換為字符流讀取字

23、節(jié)流InputStreamInputStreamReader封裝為字符緩沖流BufferedReaderreadLine轉(zhuǎn)換為字符流寫入文件字節(jié)流FileOutStreamOutputStreamWriter封裝為字符緩沖流BufferedWriterwrite方法2:以寫文件字符流FileWriter開始,無需字節(jié)流到字符流的轉(zhuǎn)換tryPrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(d:11.txt);BufferedReader br =new BufferedReader(new InputStream

24、Reader(System.in); String s=;while(s = br.readLine() != null ) pw.println(s); /PrintWriter可直接輸出換行br.close(); pw.close();catch(EOFException e) System.err.println(“End of stream”); /多加了一個捕捉catch(IOException e) e.printStackTrace();System.in轉(zhuǎn)換為字符流讀取字節(jié)流InputStreamInputStreamReader封裝為字符緩沖流BufferedReaderreadLine轉(zhuǎn)換為字符流寫入文件字符流FileWriterBufferedWriterPrintWriterprintln封裝為高級應(yīng)用字符流進一步封裝思考題分別用字節(jié)流和字符流2種方式:實現(xiàn)文件復(fù)制功能。public static void copyFile(String srcfilePathAndName, String targetfilePathAndName) try File sourceFile = new File(srcfilePathAndName); FileInputStream in = new FileInputStream(sr

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論