版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十二講文件管理和I/O入門(mén),一、概念,Java 文件管理概述 Java 提供了類(lèi)似“資源管理器”或者 DOS 命令所具有的文件和目錄管理功能。 如:建立文件、建立目錄、刪除文件、顯示目錄中的文件等。 文件:一組相關(guān)信息的集合。 目錄:一種特殊的文件,用以存放文件和其他目錄。 路徑:從盤(pán)符經(jīng)過(guò)各級(jí)目錄到文件的目錄序列,二、I/O操作分類(lèi),分為三類(lèi): 1、File類(lèi),文件操作類(lèi) 2、字節(jié)操作類(lèi) 3、字符操作類(lèi),三、File類(lèi),File類(lèi) File類(lèi)是IO包中唯一代表磁盤(pán)文件本身信息的類(lèi),而不是文件中的內(nèi)容。File 類(lèi)通過(guò)簡(jiǎn)易的方法封裝了復(fù)雜的、與平臺(tái)相關(guān)的文件及目錄。 File類(lèi)定義了一些與平
2、臺(tái)無(wú)關(guān)的方法來(lái)操縱文件,例如:創(chuàng)建、刪除文件、創(chuàng)建目錄、顯示目錄中文件、重命名文件、判斷文件的讀寫(xiě)權(quán)限及是否存在、設(shè)置和查詢文件的最近修改時(shí)間等。 Java中的目錄被當(dāng)做一種特殊的文件使用,list方法可以返回目錄中的所有子目錄和文件名。 文件管理步驟: 建立 File 對(duì)象與具體的文件或目錄建立聯(lián)系 調(diào)用 File 類(lèi)的方法進(jìn)行文件和目錄操作,1、File 類(lèi)的構(gòu)造方法,1、public File(String path) 創(chuàng)建一個(gè) File 對(duì)象,指向 path 所表示的文件或者目錄。 如:File dir=new File(“d:javaf.txt”); 2、File(File dir,
3、 String name) 創(chuàng)建一個(gè) File 對(duì)象,指向 dir 指定的目錄下的文件名為 name 如:File f1=new File(“d:myfile”,”Hello.java”);注意這里給出的目錄一定要存在,否則創(chuàng)建不成功。 3、File(File path, String name) 創(chuàng)建一個(gè) File 對(duì)象,直接指向 path抽象路徑名下的 name 文件。 說(shuō)明:創(chuàng)建一個(gè) File對(duì)象, 不會(huì)影響到真實(shí)的文件系統(tǒng),只是在對(duì)象與真實(shí)的文件或目錄之間建立了聯(lián)系。,注意這里的要用轉(zhuǎn)義字符表示,創(chuàng)建時(shí)要保證給出的路徑是存在的否則創(chuàng)建失敗,import java.io.* ; publ
4、ic class IoFileClass public static void main(String args) File f = new File(f:myfile.txt) ; try f.createNewFile() ; catch (Exception e) System.out.println(e) ; ;,例1:在F盤(pán)創(chuàng)建一個(gè)名為myfile.txt的文本文件,說(shuō)明:File類(lèi)的f.createNewFile()方法,當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定名稱的文件時(shí),創(chuàng)建一個(gè)新的空文件。所以文件操作時(shí)會(huì)進(jìn)行判斷,如果文件已經(jīng)存在,則不會(huì)重新創(chuàng)建。,2、File 類(lèi)的常用方法,方法
5、 說(shuō)明 public boolean canRead() 測(cè)試 File 對(duì)象關(guān)聯(lián)文件是否可讀 public boolean canWrite() 測(cè)試 File 對(duì)象關(guān)聯(lián)文件是否可寫(xiě) public boolean exists() 測(cè)試 File 對(duì)象關(guān)聯(lián)文件(目錄)是否存在 public boolean isDirectory() 測(cè)試 File 對(duì)象是否對(duì)應(yīng)了磁盤(pán)目錄 public boolean isFile() 測(cè)試 File 對(duì)象是否對(duì)應(yīng)了磁盤(pán)文件 public String getAbsolutePath() 獲取文件的絕對(duì)路徑ublic String getName() 獲取文
6、件的名字 public String getPath() 獲取文件的路徑 public long lastModified() 返回文件最后被修改的時(shí)間 (與 1970年 1 月 1 日00:00:00 GMT 的時(shí)間差),public boolean 設(shè)置文件(目錄)最后修改時(shí)間 setLastModified(long time) public long length() 返回文件的長(zhǎng)度(bytes) public String list() 如果 File 對(duì)象指向目錄的話, 返回該目錄下所有文件名的列表 public boolean mkdir() 建立一個(gè)目錄 public bool
7、ean mkdirs() 建立一個(gè)目錄。如果該 目錄的父目錄不存在的話,也創(chuàng)建它 public boolean renameTo(File)更改文件名,新文件名為 參數(shù)所指定 public boolean delete() 刪除文件或目錄 public boolean createNewFile()自動(dòng)創(chuàng)建一個(gè)新的空文件(如 throws IOException 果對(duì)象 指向的文件不存在的話 public File listFiles() 返回一個(gè)文件路徑名數(shù)組, 表示文件對(duì)象所指目錄中的文件 或目錄,對(duì)象非目錄時(shí)為 null,例2、通過(guò)程序判斷是否存在文件: import java.io.*
8、 ; public class IoFileClass1 public static void main(String args) File f = new File(f:myfile.txt ) ; if(f.exists() System.out.println(文件已存在。) ; else System.out.println(文件不存在) ; ;,例3:如果文件存在則刪除,如果文件不存在則創(chuàng)建,import java.io.* ; public class IoFileClass2 public static void main(String args) throws Exceptio
9、n File f = new File(f:myfile.txt ) ; if(f.exists() f.delete() ; else f.createNewFile() ; ;,例4: import java.io.*; class FileTest public static void main(String args) File f=new File(a.txt); if(f.exists() f.delete(); if(f.mkdirs() System.out.println(文件創(chuàng)建成功!); System.out.println(文件所在路徑是+f.getPath(); Sy
10、stem.out.println(文件所在絕對(duì)路徑是+f.getAbsolutePath(); else System.out.println(文件沒(méi)有創(chuàng)建成功!); ,getPath()讀取文件路徑與geAbsolutePath()讀取絕對(duì)路徑的區(qū)別,import java.io.*; import java.util.*; class FileFun public static void main(String args) File f=new File(1.txt); tryf.createNewFile(); catch (Exception e) System.out.println
11、(磁盤(pán)錯(cuò)誤!); System.out.println(文件名是: +f.getName(); System.out.println(文件路徑是: +f.getPath(); System.out.println(文件絕對(duì)路徑是: +f.getAbsolutePath(); System.out.println(文件是否存在: +(f.exists()?存在:不存在); System.out.println(文件是否可讀: +(f.canRead()?可讀:不可讀); System.out.println(文件是否是目錄: +(f.isDirectory()?是目錄:不是目錄); System
12、.out.println(文件最后修改時(shí)間:+new Date(f.lastModified(); ,例5:通過(guò)文件類(lèi)的相關(guān)方法打印文件的信息,例6:創(chuàng)建磁盤(pán)文件“d:oktry.txt”。 import java.io.*; class CreateFile File path; File file; CreateFile(String dir, String name) throws IOException path = new File(dir); file = new File(path, name); path.mkdirs(); file.createNewFile(); publ
13、ic static void main(String args) throws IOException new CreateFile(d:ok, try.txt); System.out.println(“文件創(chuàng)建成功!.); ,異常轉(zhuǎn)移給JVM,異常轉(zhuǎn)移給調(diào)用它的方法,import java.io.*; class TimeModify File file; TimeModify(String name) file = new File(name); if(!file.exists() System.out.println(name + not found.); System.exit(0)
14、; ,例 7:將磁盤(pán)文件“d:oktry.txt” 的最后修改時(shí)間改為前一天。, void ModifyFileTime(long days) long t = file.lastModified(); t += days*24*60*60*1000; file.setLastModified(t); public static void main(String args) TimeModify tm = new TimeModify(d:oktry.txt); tm.ModifyFileTime(-1); System.out.println(“修改完畢!); ,四、目錄,創(chuàng)建目錄 另外兩個(gè)
15、有用的File類(lèi)的方法是mkdir()和mkdirs()。mkdir()方法創(chuàng)建了一個(gè)目錄,創(chuàng)建成功返回true,創(chuàng)建失敗返回false。創(chuàng)建失敗是指File對(duì)象指定的目錄已經(jīng)存在,或者是因?yàn)檎麄€(gè)路徑不存在而不能創(chuàng)建目錄。創(chuàng)建路徑不存在的目錄,用mkdirs()的方法,它創(chuàng)建目錄以及該目錄所有的父目錄。,import java.io.*; class FileDir public static void main(String args) File f=new File (“java); f.mkdir(); ,在當(dāng)前目錄下建立java子目錄,import java.io.*; class F
16、ileDir public static void main(String args) File f=new File (“zhangjava); f.mkdirs(); ,例8:列出目錄下的所有文件,import java.io.* ; public class IODemo05 public static void main(String args) File f = new File(F:2012java11) ; / 列出此目錄下的全部文件 / 列出之前最好先判斷給出的是不是一個(gè)目錄 if(f.isDirectory() String str = f.list() ; for(int
17、i=0;istr.length;i+) System.out.println(stri) ; else System.out.println(不是目錄。) ; ;,五、數(shù)據(jù)流初步理解,常見(jiàn)的輸入輸出問(wèn)題鍵盤(pán)輸入一些數(shù)據(jù),放到一個(gè)文件中保存 讀取一個(gè)文本文件的內(nèi)容,在屏幕上顯示出來(lái) 一個(gè)文件向另一個(gè)文件進(jìn)行數(shù)據(jù)傳輸 生成一個(gè)文件,保存程序的運(yùn)行結(jié)果 數(shù)據(jù)輸入輸出流 Java 所有的輸入輸出問(wèn)題都基于數(shù)據(jù)流實(shí)現(xiàn),數(shù)據(jù)流有輸入流和輸出流兩大類(lèi)。,輸入流是用來(lái)讀(讀是讀到程序)數(shù)據(jù)的:也就是說(shuō)從外部讀取數(shù)據(jù)到程序中(例如:從你電腦中的文件中讀入一些數(shù)據(jù)到程序中;從鍵盤(pán)輸入一些數(shù)據(jù)到程序中) 輸出流是用
18、來(lái)寫(xiě)數(shù)據(jù)的:也就是說(shuō)從程序中把數(shù)據(jù)傳到外部(例如:把程序中得到的數(shù)據(jù)放在一個(gè)電腦中指定的文件中; 把程序運(yùn)行的結(jié)果顯示在屏幕上) 注意: 讀是讀入到程序中 寫(xiě)是寫(xiě)入到外部(程序外)中,輸入流和輸出流,輸入流和輸出流,向程序流動(dòng)的流為輸入流,程序讀數(shù)據(jù),從程序流出的流為輸出流 ,從程序中把數(shù)據(jù)向外傳,思考,“鍵盤(pán)輸入一些數(shù)據(jù)”,需要輸入流還是輸出流? “程序運(yùn)行結(jié)果保存到文件”,需要輸入流還是輸出流? “讀取一個(gè)文本文件”,需要輸入流還是輸出流? “顯示文件內(nèi)容”,需要什么流? 注意:輸入輸出流的劃分是以程序?yàn)橐罁?jù)的,讀寫(xiě)操作也是以程序?yàn)閷?duì)象的。,輸入流,輸出流,輸入流,輸出流,六、數(shù)據(jù)流的封裝
19、,數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動(dòng)序列。InputStream面向字節(jié)的輸入流的父類(lèi),InputStream 是一個(gè)抽象類(lèi)。,OutputStream面向字節(jié)的輸出流的父類(lèi),OutputStream。,Reader 面向字符的輸入流的父類(lèi)。,Writer面向字符的輸出流的父類(lèi),七、讀寫(xiě)操作過(guò)程,RandomAccessFile 類(lèi)是 Java 中功能最豐富的文件訪問(wèn)類(lèi),提供了多樣的文件訪問(wèn)方法,可以對(duì)磁盤(pán)文件“隨機(jī)存取”的方式進(jìn)行訪問(wèn)。 兩種構(gòu)造方法: New RandomAccessFile(f,”rw”)/讀寫(xiě)方式 RandomAccessFile(r,”r”)/只讀方式,RandomA
20、ccessFile類(lèi)僅限于操作文件,不能訪問(wèn)其他的IO設(shè)備,如網(wǎng)絡(luò),內(nèi)存映像等。 不管是讀還是寫(xiě)都是以文件指示器所在的位置為準(zhǔn)。 程序以讀寫(xiě)方式打開(kāi)一個(gè)文件時(shí),文件若不存在則程序會(huì)創(chuàng)建 RandomAccessFile 類(lèi)中有個(gè)文件指示器,剛打開(kāi)文件時(shí),文件指示器指向文件的開(kāi)始位置,通過(guò)RandomAccessFile類(lèi)的對(duì)象讀取文件時(shí),是從指示器指示的當(dāng)前位置開(kāi)始讀取,當(dāng)讀n個(gè)字節(jié)后,指示器指向n個(gè)字節(jié)后的位置。 RandomAccess類(lèi)在隨機(jī)(相對(duì)順序而言)讀寫(xiě)等長(zhǎng)記錄格式的文件時(shí)有很大的優(yōu)勢(shì)。,例9:import java.io.* ; public class TestRandomA
21、ccessFile public static void main(String args) throws Exception RandomAccessFile raf1 = new RandomAccessFile(f:1.txt,rw) ; / 保存姓名(8位字符串)和年齡(int 4): String name = zhangsan ; int age = 20 ; raf1.write(name.getBytes() ; raf1.writeInt(age) ; raf1.close() ; RandomAccessFile raf2 = new RandomAccessFile(f:
22、1.txt,r) ; byte b = new byte8 ; raf2.read(b) ; int age2 = raf2.readInt() ; System.out.println(new String(b)+ - +age2) ; ;,import java.io.*; class RAFile RandomAccessFile rf; RAFile(String file) throws Exception rf = new RandomAccessFile(file,r);/以讀模式打開(kāi) void output() throws Exception String s; while(
23、true) s = rf.readLine();/讀取一行 if(s = null) break;/測(cè)試是否讀到尾 System.out.println(s); public static void main(String args) throws Exception RAFile f = new RAFile(f:zhang.txt); f.output(); ,思考:把上例改為RandomAccessFile類(lèi)的read方法讀取如何實(shí)現(xiàn)?,例10:import java.io.*; class RAFileNew RandomAccessFile rf; RAFileNew(String file) throws Exception rf = new RandomAccessFile(file,r);/以讀模式打開(kāi) void output() throws Exception String s; while(true) byte b=new byte300; int l=rf.read(b);/讀取一行 if(l = -1) break;/測(cè)試是否讀到尾 System.out.println(b.toString(); public static void main(String a
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鐵路安全培訓(xùn)課學(xué)習(xí)心得
- 未來(lái)五年農(nóng)林牧漁產(chǎn)品鐵路運(yùn)輸企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年工礦工程設(shè)計(jì)階段項(xiàng)目管理服務(wù)行業(yè)市場(chǎng)營(yíng)銷(xiāo)創(chuàng)新戰(zhàn)略制定與實(shí)施分析研究報(bào)告
- 未來(lái)五年桂花魚(yú)企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年薤菜企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年美術(shù)圖案設(shè)計(jì)企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略分析研究報(bào)告
- 未來(lái)五年非直接食用果類(lèi)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略分析研究報(bào)告
- 期貨衍生品交易制度規(guī)范
- 工地生活區(qū)管理制度規(guī)范
- 地水廠上墻制度規(guī)范標(biāo)準(zhǔn)
- 北京市平谷區(qū)政務(wù)服務(wù)中心綜合工作人員招聘筆試備考題庫(kù)及答案解析
- 2026年高級(jí)會(huì)計(jì)師面試題及答案解析
- 湖南省邵陽(yáng)市2025-2026學(xué)年高二歷史上學(xué)期期末模擬卷(試卷及全解全析)
- (2025版)腹膜后腫瘤診治專家共識(shí)課件
- 基因編輯真菌鑒定
- 轉(zhuǎn)讓釣場(chǎng)合同協(xié)議書(shū)
- 溫泉洗浴行業(yè)分析報(bào)告
- 《數(shù)據(jù)管理能力成熟度模型》DCMM評(píng)估內(nèi)容及流程
- 一年級(jí)語(yǔ)文上冊(cè)測(cè)試題命制與批改標(biāo)準(zhǔn)
- 海外安保培訓(xùn)核心科目
- 多胎肉羊養(yǎng)殖培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論