本文目錄一覽:
JAVA里怎麼用IO流判斷在D盤裡是的東西是目錄還是文件 要詳細代碼 謝謝
有個API幫助文檔(這東東一定要學會用)在 java IO包中 有個FIle類 。。裏面有 isFIle() 和isDIrectory()。 2個方法。。判斷是不是文件和文件夾
java的幾種IO流讀取文件方式
一、超類:
位元組流: InputStream(讀入流) OutputStream(寫出流)
字符流: Reader(字符 讀入流) Writer (字符寫出流)
二、文件操作流
位元組流: FileInputStream ,FileOutputStream
字符流: FileReader, FileWriter(用法與位元組流基本相同,不寫)
//1.指定要讀 的文件目錄及名稱
File file =new File(“文件路徑”);
//2.創建文件讀入流對象
FileInputStream fis =new FileInputStream(file);
//3.定義結束標誌,可用位元組數組讀取
int i =0 ;
while((i = fis.read())!=-1){
//i 就是從文件中讀取的位元組,讀完後返回-1
}
//4.關閉流
fis.close();
//5.處理異常
//1.指定要寫到的文件目錄及名稱
File file =new File(“文件路徑”);
//2.創建文件讀入流對象
FileOutputStream fos =new FileOutputStream(file);
//3.定義結束標誌
fos.write(要寫出的位元組或者位元組數組);
//4.刷新和關閉流
fos.flush();
fos.close();
//5.處理異常
三、緩衝流:
位元組緩衝流: BufferedInputStream,BufferedOutputStream
字符緩衝流:BufferedReader ,BufferedWriter
緩衝流是對流的操作的功能的加強,提高了數據的讀寫效率。既然緩衝流是對流的功能和讀寫效率的加強和提高,所以在創建緩衝流的對象時應該要傳入要加強的流對象。
//1.指定要讀 的文件目錄及名稱
File file =new File(“文件路徑”);
//2.創建文件讀入流對象
FileInputStream fis =new FileInputStream(file);
//3.創建緩衝流對象加強fis功能
BufferedInputStream bis =new BufferedInputStream(fis);
//4.定義結束標誌,可用位元組數組讀取
int i =0 ;
while((i = bis.read())!=-1){
//i 就是從文件中讀取的位元組,讀完後返回-1
}
//5.關閉流
bis.close();
//6.處理異常
//1.指定要寫到的文件目錄及名稱
File file =new File(“文件路徑”);
//2.創建文件讀入流對象
FileOutputStream fos =new FileOutputStream(file);
//3.創建緩衝流對象加強fos功能
BufferedOutputStream bos=new BufferedOutputStream(fos);
//4.向流中寫入數據
bos.write(要寫出的位元組或者位元組數組);
//5.刷新和關閉流
bos.flush();
bos.close();
//6.處理異常
四、對象流
ObjectInputStream ,ObjectOutputStream
不同於以上兩種類型的流這裡只能用位元組對對象進行操作原因可以看上篇的編碼表比照原理
ObjectOutputStream對象的序列化:
將java程序中的對象寫到本地磁盤裡用ObjectOutputStream
eg:將Person類的對象序列化到磁盤
創建Person類
注1:此類要實現Serializable接口,此接口為標誌性接口
注2:此類要有無參的構造函數
注3:一旦序列化此類不能再修改
class Person implements Serializable{
public Person(){}
}
2.創建對象流對象
註:要增強功能可以將傳入文件緩衝流
ObjectOutputStream oos =new ObjectOutputStream(
new FileOutputStream(new File(“文件路徑”)));
3.寫入對象 ,一般會將對象用集合存儲起來然後直接將集合寫入文件
ListPerson list =new ArrayList();
list.add(new Person());
…(可以添加多個)
oos.writeObject(list);
4.關閉流,處理異常
oos.flush();
oos.close();
五、轉換流:
這類流是用於將字符轉換為位元組輸入輸出,用於操作字符文件,屬於字符流的子類,所以後綴為reader,writer;前綴inputstream,outputstream;
注 :要傳入位元組流作為參賽
InputStreamReader: 字符轉換輸出流
OutputStreamWriter:字符轉換輸入流
//1.獲取鍵盤輸入的位元組流對象
inInputStream in =Stream.in;
/*2.用轉換流將位元組流對象轉換為字符流對象,方便調用字符緩衝流的readeLine()方法*/
InputStreamReader isr =new InputStreamReader(in);
/*5.創建字符轉換輸出流對象osw,方便把輸入的字符流轉換為位元組輸出到本地文件。*/
OutputStreamWriter osw =new OutputStreamWriter(new
FileOutputStream(new File(“文件名”)));
/*3.現在isr是字符流,可以作為參數傳入字符緩衝流中*/
BufferedReader br =new BufferedReader(isr);
/*4.可以調用字符緩衝流br的readLine()方法度一行輸入文本*/
String line =null;
while((line =br.readLine()){
osw.write(line);//osw是字符流對象,可以直接操作字符串
}
註:InputStreamReader isr =new InputStreamReader(new “各種類型的位元組輸入流都行即是:後綴為InputStream就行”);
OutputStreamWriter osw =new OutputStreamWriter(new
“後綴為OutputStream就行”);
六、區別記憶
1.對象流是可以讀寫幾乎所有類型的只要是對象就行,而位元組字符流,只能讀寫單個位元組字符或者位元組字符數組,以上沒有讀寫位元組字符數組的;注意對象流只有位元組流!
2.字符和位元組循環讀入的結束條件int i=0; (i =fis.read())!=-1
用字符數組複製文件(fr 讀入流 ,fw寫出流),位元組流也是相同的用法
int i = 0; char[] c = new char[1024];
while((i = fr.reade()) !=-1)){
fw.write(c,0,i);
}
123456
3.對象流裏面套緩衝流的情景:
new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File(「文件路徑」))));
4.記憶流及其功能的方法:
前綴表示功能,後綴表示流的類型;
比如說FileInputStream 前綴:File,表示操作的磁盤,後綴:intputstream,表示是位元組輸入流。
同理 FileReader:表示操作文件的字符流
ObjectInputStream :操作對象的位元組輸入流
5.拓展:獲取鍵盤輸入的字符的緩衝流的寫法:
new BufferedReader(new InputStreamReader(System.in)));
將位元組以字符形式輸出到控制台的字符緩衝流的寫法:
new BufferedWriter( new OutputStreamWriter(System.out))
為什麼Java中的file類無法只能操作不能讀寫?
說下我的理解,通常意思下,我們理解的文件,其實包含兩部分,一部分是指保存在磁盤上的文件的具體內容,另一部分指的是保存在操作系統文件系統裏面的文件名稱,目錄那些東西。(這裡你可以去搜索下 linux inode 理解相關的概念,這裡我也不是很熟)。
文件系統是操作系統封裝磁盤操作產生的一層東西,我們只能通過操作系統提供的文件系統的API去操作磁盤。(這裡可以去學習下操作系統相關的知識)。
java中的FIle指的是 文件系統裏面的一個file,這個對象,只包含文件的一些元數據,文件大小,位置,創建時間,修改時間,創建人,權限等等一系列的文件元數據,它是不包含文件具體的內容的。所以你只能操作它,不能讀寫。所謂的操作,也就是對文件系統 那一棵文件目錄樹 進行增刪改查的操作。
file這個對象里,應該包含這個文件在磁盤上的具體位置,通過這個位置,你就可以通過文件系統的API進行文件的讀寫了。(這裡,我的理解是這樣,具體是不是這樣,我也不確定,可以去搜索 posix標準 查看通用的一些文件操作的API 來驗證下)。
而對文件具體內容的操作,你必須通過IO操作去實現。這裡過程大概如下,涉及操作系統跟驅動相關的過程,去百度吧,我也不是很熟。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/236681.html