IO-1(Java IO、File类)
1. 簡介
之前的程序,數據都存儲在內存中,一旦運行結束,數據消失。
數據持久化存儲:將內存中的數據存儲到內存以外的持久化設備中(硬盤,光盤、U盤等)。
OS中,數據都保存文件存放在相應的文件夾。
集合只能在內存中臨時存儲數據,要長期存儲需要用到IO流。
1.1 IO
輸出(寫)output:需把內存中的數據存儲到持久化設備中
輸入(讀)input:把持久化設備上的數據讀到內存中
1.2 Java IO流
流可被看做一組有序的字節集合,本質是數據傳輸,根據處理數據類型的不同,流可分為:
- 字節流:以字節(8 bit)為單位,包含兩個抽象類:
- InputStream(輸入流)
- OutputStream(輸出流)
- 字符流:以字符(16 bit)為單位,根據碼表映射字符,一次可以讀多個字節,包含兩個抽象類:
- Reader(輸入流)
- Writer(輸出流)
字節流在處理輸入輸出時不會用到緩存,而字符流用到了緩存。
| 流向 | ? | ? | ? | ? |
| ? | 輸入流 | 讀數據 | FileReader | Reader |
| ? | 輸出流 | 寫數據 | FileWriter | Writer |
| 數據類型 | ? | ? | ? | ? |
| ? | 字節流 | ? | ? | ? |
| ? | ? | 字節輸入流 | 讀數據 | InputStream |
| ? | ? | 字節輸出流 | 寫數據 | OutputStream |
| ? | 字符流 | ? | ? | ? |
| ? | ? | 字符輸入流 | 讀數據 | Reader |
| ? | ? | 字符輸出流 | 寫數據 | Writer |
JavaIO設計時采用了Decorator(裝飾者)設計模式。
其中ByteArrayInputStream、StringBufferInputStream、FileInputStream和PipedInputStream是Java提供的最基本的對流進行處理的類。
FilterInputStream為一個封裝類的基類,可以對基本的IO類進行封裝。
使用這種設計模式好處:可以在運行時動態地給對象添加一些額外的職責,與使用繼承的設計方法相比該方法具有很好的靈活性。
2. File類
io包中
File類的實例不可改變
它是File文件和目錄路徑名的抽象表示。Java中,把文件或目錄(文件夾)都封裝成了File對象。
2.1 創建File對象
用構造函數
File(String pathname):將指定的路徑名轉換為一個File對象
File(String parent,String child):根據指定的父路徑和文件名(文件路徑)創建File對象
File(File parent,String child):根據父路徑對象和文件路徑創建對象
String pathName="e:\\java_code\\hello.java"; File f1=new File(pathName); //創建了一個File對象f1指向了一個路徑; //若hello.java存在,不會創建它只是指向路徑File f2=new File("e:\\java_code\\hello.java");File dir=new File("e:\\java_code"); File f3=new File(dir,"hello.java");2.2 常用方法
1、獲取文件的絕對路徑,即全路徑:getAbsolutePath()
String abspath=f1.getAbsolutePath();- 絕對路徑:以盤符開頭,固定,不可改變的路徑
- 相對路徑:不能以盤符開頭,相對某個參照物的。在eclipse中相對于當前項目的根目錄,與src平級。
2、獲取File封裝的路徑:getPath()
String path=f1.getPath();3、獲取文件名稱和文件夾名稱:getName()
String fileName=f1.getName();4、獲取文件大小(字節數):length()——bytes
long size=fi.length();2.3 File類操作
File file=new File("e:\\file.txt");1、創建文件:createNewFile()
- 若文件不存在,創建,返回true
- 若文件存在,不創建,返回false
- 路徑錯誤,IOException
2、刪除文件夾(不去回收站):delete()
boolean b2=file.delete();3、判斷文件是否存在:exists()
boolean b3=file.exists();4、對目錄的操作
①創建單個目錄:mkdir()
File dir=new File("e:\\abd"); boolean b4=dir.mkdir();和createFile()類似。
②創建多個目錄:mkdirs()
File dir=new File("a\\b\\c"); boolean b5=dir.mkdirs();"a\\b\\c"父路徑不存在時也會創建
③刪除:delete()
boolean b5=dir.delete();只有將目錄中的內容都刪除,保證目錄為空,才能刪除此目錄。
5、判斷時文件還是目錄
file.exists(); file.isFile(); file.isDictionary();以上三個方法都返回的是boolean值。
6、獲取目錄下的當前文件以及文件夾的名字:list()
File dir=new File("e:\\java"); String[] names=dir.list(); for(String name:names){System.out.println(name); }7、獲取目錄下當前文件以及文件對象:listFiles()
File[] files=dir.listFiles(); for(File file:files){System.out.println(file); }注:6、7中,獲取時需確定目錄存在,而且指定的必須是目錄。
否則易返回null,出現NullPointerException
總結
以上是生活随笔為你收集整理的IO-1(Java IO、File类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用API-3(System类、Math
- 下一篇: IO-3(Reader、Writer、编