java中的io流之file類(file類和io流)

本文目錄一覽:

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-tw/n/236681.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:01
下一篇 2024-12-12 12:01

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論