IO面試題

1:Java語(yǔ)言定義了許多類專門負(fù)責(zé)各種方式的輸入或者輸出才漆,這些類都被放在java.io包中。其中佛点,

所有輸入流類都是抽象類InputStream(字節(jié)輸入流)醇滥,或者抽象類Reader(字符輸入流)的子類;

而所有輸出流都是抽象類OutputStream(字節(jié)輸出流)或者Writer(字符輸出流)的子類超营。

【首先需要明白的是:流是干什么的鸳玩??演闭?(為了永久性的保存數(shù)據(jù))

? 根據(jù)數(shù)據(jù)流向的不同分為輸入流和輸出流不跟;

? 根據(jù)處理數(shù)據(jù)類型的不同分為字符流和字節(jié)流;

【然后需要明白的是輸入模式和輸出模式是誰(shuí)流向誰(shuí):

InputStream(字節(jié)輸入流)和Reader(字符輸入流)通俗的理解都是讀(read)的船响。

OutputStream(字節(jié)輸出流)和Writer(字符輸出流)通俗的理解都是寫(writer)的躬拢。

最后下面搞清楚各種流的類型的該怎么用,誰(shuí)包含誰(shuí)见间,理清思路聊闯。

2:InputStream類是字節(jié)輸入流的抽象類,是所有字節(jié)輸入流的父類米诉,InputStream類具有層次結(jié)構(gòu)如下圖所示菱蔬;


3:java中的字符是Unicode編碼的,是雙字節(jié)的史侣。InputStream是用來(lái)處理字節(jié)的拴泌,在處理字符文本時(shí)很不方便。Java為字符文本的輸入提供了專門的一套類Reader惊橱。Reader類是字符輸入流的抽象類蚪腐,所有字符輸入流的實(shí)現(xiàn)都是它的子類。

Reader

4:輸出流OutputStream類是字節(jié)輸入流的抽象類税朴,此抽象類表示輸出字節(jié)流的所有類的超類回季。

OutputStream

5:Writer類是字符輸出流的抽象類,所有字符輸出類的實(shí)現(xiàn)都是它的子類正林。

Writer

6:File類是IO包中唯一代表磁盤文件本身的對(duì)象泡一。通過(guò)File來(lái)創(chuàng)建,刪除觅廓,重命名文件鼻忠。File類對(duì)象的主要作用就是用來(lái)獲取文本本身的一些信息。如文本的所在的目錄杈绸,文件的長(zhǎng)度帖蔓,讀寫權(quán)限等等矮瘟。(有的需要記憶,比如isFile(),isDirectory(),exits();有的了解即可塑娇。使用的時(shí)候查看API)

詳細(xì)如下:

File類(File類的概述和構(gòu)造方法)

A:File類的概述

  File更應(yīng)該叫做一個(gè)路徑

  文件路徑或者文件夾路徑

  路徑分為絕對(duì)路徑和相對(duì)路徑

? ? ? ?絕對(duì)路徑是一個(gè)固定的路徑,從盤符開(kāi)始

 相對(duì)路徑相對(duì)于某個(gè)位置,在eclipse下是指當(dāng)前項(xiàng)目下,在dos下

  查看API指的是當(dāng)前路徑

  文件和目錄路徑名的抽象表示形式

B:構(gòu)造方法

File(String pathname):根據(jù)一個(gè)路徑得到File對(duì)象

  File(String parent, String child):根據(jù)一個(gè)目錄和一個(gè)子文件/目錄得到File對(duì)象

  File(File parent, String child):根據(jù)一個(gè)父File對(duì)象和一個(gè)子文件/目錄得到File對(duì)象

File類(File類的創(chuàng)建功能)

  A:創(chuàng)建功能

public boolean createNewFile():創(chuàng)建文件 如果存在這樣的文件芥永,就不創(chuàng)建了

    public boolean mkdir():創(chuàng)建文件夾 如果存在這樣的文件夾,就不創(chuàng)建了

    public boolean mkdirs():創(chuàng)建文件夾,如果父文件夾不存在钝吮,會(huì)幫你創(chuàng)建出來(lái)

(使用createNewFile()文件創(chuàng)建的時(shí)候不加.txt或者其他后綴也是文件,不是文件夾板辽;使用mkdir()創(chuàng)建文件夾的時(shí)候奇瘦,如果起的名字是比如aaa.txt也是文件夾不是文件;)

注意事項(xiàng):

如果你創(chuàng)建文件或者文件夾忘了寫盤符路徑劲弦,那么耳标,默認(rèn)在項(xiàng)目路徑下。

File類(File類的重命名和刪除功能)

  A:重命名和刪除功能

    public boolean renameTo(File dest):把文件重命名為指定的文件路徑

    public boolean delete():刪除文件或者文件夾

  B:重命名注意事項(xiàng)

    如果路徑名相同邑跪,就是改名次坡。

    如果路徑名不同,就是改名并剪切画畅。

  C:刪除注意事項(xiàng):

 Java中的刪除不走回收站砸琅。

要?jiǎng)h除一個(gè)文件夾剖煌,請(qǐng)注意該文件夾內(nèi)不能包含文件或者文件夾

File類(File類的判斷功能)

  A:判斷功能

public boolean isDirectory():判斷是否是目錄

public boolean isFile():判斷是否是文件

public boolean exists():判斷是否存在

public boolean canRead():判斷是否可讀

public boolean canWrite():判斷是否可寫

public boolean isHidden():判斷是否隱藏

File類(File類的獲取功能)

  A:獲取功能

    public String getAbsolutePath():獲取絕對(duì)路徑

    public String getPath():獲取路徑

    public String getName():獲取名稱

    public long length():獲取長(zhǎng)度欧芽。字節(jié)數(shù)

    public long lastModified():獲取最后一次的修改時(shí)間,毫秒值

????????????????public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數(shù)組

    public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組

File類(文件名稱過(guò)濾器的概述及使用)

  A:文件名稱過(guò)濾器的概述

  public String[] list(FilenameFilter filter)

  public File[] listFiles(FileFilter filter)


File的一些操作

public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數(shù)組

public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組

list()獲取某個(gè)目錄下所有的文件或者文件夾:



案例演示:

獲取某種格式的文件比如獲取某種后綴的圖片媚狰,并輸出文件名:

下面演示獲取文件夾下面子目錄里面的文件獲纫А(并沒(méi)有完全獲取子目錄的子目錄等等诱篷,僅僅獲取了子一級(jí)目錄):


A:文件名稱過(guò)濾器的概述

    public String[] list(FilenameFilter filter)

    public File[] listFiles(FileFilter filter)


7:下面以一些字節(jié)輸入輸出流具體的案例操作(操作的時(shí)候認(rèn)清自己使用的是字節(jié)流還是字符流):

注意:read()方法讀取的是一個(gè)字節(jié),為什么返回是int,而不是byte

字節(jié)輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進(jìn)制形式的存儲(chǔ)的,如果每次讀取都返回byte,有可能在讀到中間的時(shí)候遇到111111111;那么這11111111是byte類型的-1,我們的程序是遇到-1就會(huì)停止不讀了,后面的數(shù)據(jù)就讀不到了,所以在讀取的時(shí)候用int類型接收,如果11111111會(huì)在其前面補(bǔ)上雳灵;24個(gè)0湊足4個(gè)字節(jié),那么byte類型的-1就變成int類型的255了這樣可以保證整個(gè)數(shù)據(jù)讀完,而結(jié)束標(biāo)記的-1就是int類型

FileInputStream的單個(gè)字節(jié)讀茸厮:

FileOutputStream的單個(gè)字節(jié)寫入:


FileInputStream和FileOutputStream定義小數(shù)組進(jìn)行讀寫操作:(文件拷貝也是這樣。)

IO流(BufferedInputStream和BufferOutputStream拷貝)

* A:緩沖思想

  * 字節(jié)流一次讀寫一個(gè)數(shù)組的速度明顯比一次讀寫一個(gè)字節(jié)的速度快很多悯辙,

  * 這是加入了數(shù)組這樣的緩沖區(qū)效果琳省,java本身在設(shè)計(jì)的時(shí)候,

  * 也考慮到了這樣的設(shè)計(jì)思想笑撞,所以提供了字節(jié)緩沖區(qū)流

* B.BufferedInputStream

  * BufferedInputStream內(nèi)置了一個(gè)緩沖區(qū)(數(shù)組)

  * 從BufferedInputStream中讀取一個(gè)字節(jié)時(shí)

  * BufferedInputStream會(huì)一次性從文件中讀取8192個(gè), 存在緩沖區(qū)中, 返回給程序一個(gè)

  * 程序再次讀取時(shí), 就不用找文件了, 直接從緩沖區(qū)中獲取

  * 直到緩沖區(qū)中所有的都被使用過(guò), 才重新從文件中讀取8192個(gè)

* C.BufferedOutputStream

  * BufferedOutputStream也內(nèi)置了一個(gè)緩沖區(qū)(數(shù)組)

  * 程序向流中寫出字節(jié)時(shí), 不會(huì)直接寫到文件, 先寫到緩沖區(qū)中

  * 直到緩沖區(qū)寫滿, BufferedOutputStream才會(huì)把緩沖區(qū)中的數(shù)據(jù)一次性寫到文件里


面試題小數(shù)組的讀寫和帶Buffered的讀取哪個(gè)更快?

  * 定義小數(shù)組如果是8192個(gè)字節(jié)大小和Buffered比較的話

  * 定義小數(shù)組會(huì)略勝一籌,因?yàn)樽x和寫操作的是同一個(gè)數(shù)組

  * 而Buffered操作的是兩個(gè)數(shù)組

IO流(flush和close方法的區(qū)別)

flush()方法: 用來(lái)刷新緩沖區(qū)的,刷新后可以再次寫出(字節(jié)緩沖流內(nèi)置緩沖區(qū)岛啸,如果沒(méi)有讀取出來(lái),可以使用flush()刷新來(lái))

close()方法:用來(lái)關(guān)閉流釋放資源的的,如果是帶緩沖區(qū)的流對(duì)象的close()方法,不但會(huì)關(guān)閉流,還會(huì)再關(guān)閉流之前刷新緩沖區(qū),關(guān)閉后不能再寫出

8:字符流FileReader和FileWriter

字符流是什么

  * 字符流是可以直接讀寫字符的IO流

* 字符流讀取字符, 就要先讀取到字節(jié)數(shù)據(jù), 然后轉(zhuǎn)為字符. 如果要寫出字符, 需要把字符轉(zhuǎn)為字節(jié)再寫出.

IO流(什么情況下使用字符流)

* 字符流也可以拷貝文本文件, 但不推薦使用. 因?yàn)樽x取時(shí)會(huì)把字節(jié)轉(zhuǎn)為字符, 寫出時(shí)還要把字符轉(zhuǎn)回字節(jié).

* 程序需要讀取一段文本, 或者需要寫出一段文本的時(shí)候可以使用字符流

* 讀取的時(shí)候是按照字符的大小讀取的,不會(huì)出現(xiàn)半個(gè)中文

* 寫出的時(shí)候可以直接將字符串寫出,不用轉(zhuǎn)換為字節(jié)數(shù)組


IO流(字符流是否可以拷貝非純文本的文件)

* 不可以拷貝非純文本的文件

* 因?yàn)樵谧x的時(shí)候會(huì)將字節(jié)轉(zhuǎn)換為字符,在轉(zhuǎn)換過(guò)程中,可能找不到對(duì)應(yīng)的字符,就會(huì)用?代替,寫出的時(shí)候會(huì)將字符轉(zhuǎn)換成字節(jié)寫出去

* 如果是?,直接寫出,這樣寫出之后的文件就亂了,看不了了


一些面試題鏈接:

http://blog.csdn.net/t0404/article/details/51893168

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茴肥,一起剝皮案震驚了整個(gè)濱河市坚踩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓤狐,老刑警劉巖瞬铸,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件批幌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嗓节,警方通過(guò)查閱死者的電腦和手機(jī)荧缘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拦宣,“玉大人截粗,你說(shuō)我怎么就攤上這事⊥宜恚” “怎么了绸罗?”我有些...
    開(kāi)封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)豆瘫。 經(jīng)常有香客問(wèn)我珊蟀,道長(zhǎng),這世上最難降的妖魔是什么外驱? 我笑而不...
    開(kāi)封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任育灸,我火速辦了婚禮,結(jié)果婚禮上昵宇,老公的妹妹穿的比我還像新娘磅崭。我一直安慰自己,他們只是感情好趟薄,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布绽诚。 她就那樣靜靜地躺著,像睡著了一般杭煎。 火紅的嫁衣襯著肌膚如雪恩够。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天羡铲,我揣著相機(jī)與錄音蜂桶,去河邊找鬼。 笑死也切,一個(gè)胖子當(dāng)著我的面吹牛扑媚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雷恃,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疆股,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了倒槐?” 一聲冷哼從身側(cè)響起旬痹,我...
    開(kāi)封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后两残,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體永毅,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年人弓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沼死。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崔赌,死狀恐怖意蛀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情健芭,我是刑警寧澤浸间,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站吟榴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏囊扳。R本人自食惡果不足惜吩翻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锥咸。 院中可真熱鬧狭瞎,春花似錦、人聲如沸搏予。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雪侥。三九已至碗殷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間速缨,已是汗流浹背锌妻。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旬牲,地道東北人仿粹。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像原茅,于是被迫代替她去往敵國(guó)和親吭历。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理擂橘,服務(wù)發(fā)現(xiàn)晌区,斷路器,智...
    卡卡羅2017閱讀 134,716評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法契讲,內(nèi)部類的語(yǔ)法仿吞,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法捡偏,線程的語(yǔ)...
    子非魚_t_閱讀 31,665評(píng)論 18 399
  • # 3.1 File # ## 3.1.1 File基本概念 ## 1.基本概念 -File類用于表示文件(目錄)...
    閆子揚(yáng)閱讀 471評(píng)論 0 0
  • 今天開(kāi)了三年級(jí)入學(xué)以來(lái)的第一次家長(zhǎng)會(huì) 唤冈。對(duì)于這一次期中考試的情況,進(jìn)行了詳細(xì)的說(shuō)明银伟。讓家長(zhǎng)你虹,對(duì)孩子的各門科目引起重...
    小茜茜公主閱讀 332評(píng)論 0 0
  • 望一切平安,爸爸
    YuShengJun閱讀 207評(píng)論 0 1