Java File類詳解及IO介紹及使用

我是一個(gè)CPU:這個(gè)世界慢!死!了! ,可以感受到CPU,內(nèi)存和硬盤之間的速度比較。

文件的本質(zhì)

OS(操作系統(tǒng))的目的就是可以讓上層程序可以通過(guò)一種統(tǒng)一的方式去拿到無(wú)論什么磁盤里的文件(即一段字節(jié)流)。
一切文件的本質(zhì):

  • 一段字節(jié)流
    • 文本文件(txt,代碼,html等)
    • 二進(jìn)制文件
  • 每個(gè)程序負(fù)責(zé)解釋文件中的字節(jié)流

即文件本身就是一段字節(jié)流,不管是圖片、音頻還是文本等等,文件的展示形式取決于用什么軟件打開(kāi),例如播放器可以解析mp3文件等,但是本質(zhì)上這個(gè)文件就是一段字節(jié)流。

文件和IO

程序和文件之間的雙向流讀取和輸出,和網(wǎng)絡(luò)連接時(shí),從機(jī)器到遠(yuǎn)程主機(jī)上的雙向的讀取輸出流十分相似,所以Java針對(duì)這種流抽象出了InputStream和OutputStream。

InputStream/OutputStream

  • 抽象的輸入/輸出流,無(wú)論是:
    • 從文件中讀取字節(jié)流
    • 從網(wǎng)絡(luò)中讀取字節(jié)流
    • 從任何地方讀取字節(jié)流

輸入和輸出都是以程序?yàn)榛鶞?zhǔn)來(lái)判定的

對(duì)于文件讀取,永遠(yuǎn)建議使用絕對(duì)路徑。

Java中的File類

  • File并不代表一個(gè)“文件”,它只代表一個(gè)“路徑”
  • 抽象的“文件”路徑: 可以指文件也可以指文件夾
  • File的常見(jiàn)方法
    isFile() isDirectory() exists() getAbsolutePath()等等
  • 絕對(duì)路徑和相對(duì)路徑
    相對(duì)路徑相對(duì)的是JVM當(dāng)前的工作目錄,永遠(yuǎn)建議使用絕對(duì)路徑。
  • 讀寫文件

NIO

  • NIO是Java7之后引入的,解釋為:1.new IO 2.Non-blocking IO非阻塞的IO
  • NIO中的Path其實(shí)就是舊版的File,可以通過(guò)toFile方法進(jìn)行轉(zhuǎn)換
  • NIO的Files工具類,提供了walkFileTree等方法

NIO解決的問(wèn)題是,對(duì)于舊版的流式讀取,因?yàn)槠涫峭ㄟ^(guò)字節(jié)流的形式傳輸?shù)?,一個(gè)字節(jié)一個(gè)字節(jié)的進(jìn)行讀寫,沒(méi)法插隊(duì)等等,速度較慢。NIO改為了按塊讀寫,中間塊和塊是也是沒(méi)有順序的,是比舊版IO快的。

IO太慢的解決方法

使用BufferedReader/BufferedWriter

不用重復(fù)造輪子

FileUtils

IOutils

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 流是一組有順序的,有起點(diǎn)和終點(diǎn)的字節(jié)集合,是對(duì)數(shù)據(jù)傳輸?shù)目偡Q或抽象。即數(shù)據(jù)在兩設(shè)備間的傳輸稱為流,流的本質(zhì)是...
    wustor閱讀 1,885評(píng)論 5 6
  • 1、IO介紹 在前期的學(xué)習(xí)上述知識(shí)點(diǎn)的過(guò)程中,我們書寫的任何程序,它運(yùn)行的時(shí)候都會(huì)有數(shù)據(jù)的產(chǎn)生,比如時(shí)間數(shù)據(jù),而這...
    Villain丶Cc閱讀 1,572評(píng)論 0 3
  • Java的IO和NIO 一、Java的IO Java的IO功能在java.io包下,包括輸入、輸出兩種IO流,每種...
    王小冬閱讀 1,076評(píng)論 0 9
  • 1 IONo18 1.1IO框架 【 IO:Input Output 在程序運(yùn)行的過(guò)程中,可能需要對(duì)一些設(shè)備進(jìn)...
    征程_Journey閱讀 1,028評(píng)論 0 1
  • 五、IO流 1、IO流概述 (1)用來(lái)處理設(shè)備(硬盤,控制臺(tái),內(nèi)存)間的數(shù)據(jù)。(2)java中對(duì)數(shù)據(jù)的操作都是通過(guò)...
    佘大將軍閱讀 585評(píng)論 0 0

友情鏈接更多精彩內(nèi)容