一垦垂、上節(jié)課回顧
1掀虎、線程池
理解為一個容器植影,裝有預(yù)先創(chuàng)建好的線程對象锋玲,執(zhí)行任務(wù)切平。執(zhí)行后歸還給線程池等待下次的任務(wù)退个。降低了程序的開銷:頻繁的創(chuàng)建和銷毀線程對象执赡。姚垃。
Executor:接口
ExecutorService:線程池接口
Executors:工廠類(專門負責創(chuàng)建線程池的)
ExecutorService es = Executors.newFixedThreadPool(n);
ExecutorService es = Executors.newCachedThreadPool();
創(chuàng)建任務(wù):實現(xiàn)Runnable接口
submit();//將任務(wù)提交給線程池侮邀,由線程池負責分配線程對象來執(zhí)行任務(wù)坏怪。。
2绊茧、File類的操作
描述文件和目錄
文件:帶后綴的铝宵,存儲數(shù)據(jù)。靠后綴區(qū)分鹏秋。
mp3:音頻文件尊蚁,mp4:視頻文件,jpg/png/gif...圖片文件侣夷,txt:文本文檔横朋,java文件:
目錄:用于存儲文件和目錄的。
路徑:描述文件或文件夾位置
絕對路徑:C:\Ruby\pro\aa\abc.txt
相對路徑:aa
程序來講:永遠相對于項目目錄
File("aa\abc.txt");
在項目目錄下:aa文件夾百拓,里面abc.txt
構(gòu)造方法:File類的對象:
File(String path);
File(String parent,String child);
File(File parent,String child);
常用方法:
文件:
boolean createNewFile();//用于創(chuàng)建一個新文件
long length();//用于獲取一個文件的大小琴锭,字節(jié)
目錄:文件夾
boolean mkdir();//用于創(chuàng)建一層文件夾
boolean mkdirs();//用于創(chuàng)建多層(不存在的但是必須有)
String[] list();//獲取目錄中的子內(nèi)容(文件衙传,文件夾)决帖,只獲取一層。如果作用文件上蓖捶,返回null地回。
File[] listFiles();//
listFiles(FileFilter);//接口:文件過濾器:accept(File)-->boolean
兩者皆可:
delete();//文件或文件夾(空文件夾才可以)
deleteOnExit();
exists();//判斷file對象對應(yīng)的文件文件夾,是否存在
isFile()-->boolean腺阳,判斷是否是文件
isDirectory()-->boolean落君,判斷是否是目錄
canRead()
canWriter()
getName();//文件或目錄的名稱
getPath();//獲取文件或目錄的路徑
getAbsolutePath();//獲取絕對路徑穿香,從根盤符開始描述
getAbsoluteFile();//File
getParent()-->String
getParentFile()-->File
toString()-->String亭引,重寫Object類的toString(),文件的路徑名
遞歸遍歷文件夾
3皮获、IO初識
I/O流
I:Input
O:Outout
流:Stream焙蚓,數(shù)據(jù)
IO流:流的就是數(shù)據(jù)。用于將數(shù)據(jù)從一個地方流到另一個地方洒宝。
文件——>程序
程序——>文件
網(wǎng)絡(luò)——>程序
程序——>網(wǎng)絡(luò)
流的分類:
流向:
輸入流:數(shù)據(jù)從外邊進入到程序中购公。。讀取數(shù)據(jù)
輸出流:數(shù)據(jù)從程序中出去雁歌。宏浩。寫出數(shù)據(jù)
單位:
字節(jié)流:以字節(jié)為單位。
字符流:以字符為單位靠瞎。
數(shù)據(jù)的本質(zhì)都是01碼比庄。8個01碼——>byte字節(jié)。字節(jié)流是一個最根本的流乏盐。
功能:
節(jié)點流:直接接觸數(shù)據(jù)源的流
處理流:套在流上的流佳窑。又叫過濾流。
File父能,String神凑,Date,Thread何吝。溉委。鹃唯。
FileInputSteram,BufferedInputStream瓣喊,BufferedOutputStream俯渤,ObjectInputStream,DataInputStream型宝,ByteArrayInputStream八匠。。趴酣。梨树。
二、本節(jié)課內(nèi)容
2.1岖寞、4大基類流
InputStream抡四,字節(jié)輸入流:抽象的
OutputStream:字節(jié)輸出流:抽象的
Reader:字符輸入流:抽象的
Writer:字符輸出流:抽象的
2.2、IO流的操作步驟
step1:確定數(shù)據(jù)從哪到哪仗谆。文件信息指巡。
step2:創(chuàng)建流:
流向:輸入,輸出
單位:字節(jié)隶垮,字符
子類流:文件藻雪,內(nèi)存。狸吞。勉耀。。
step3:操作流
讀取數(shù)據(jù):輸入
read()
寫出數(shù)據(jù):輸出
write()
step4:關(guān)閉流
close()
2.3蹋偏、FileInputStream
用于以字節(jié)為單位便斥,讀取文件中的數(shù)據(jù),到程序中威始。
1枢纠、構(gòu)造方法:
FileInputStream(String name)
通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件由文件系統(tǒng)中的路徑名 name命名黎棠。
FileInputStream(File file)
通過打開與實際文件的連接創(chuàng)建一個 FileInputStream 晋渺,該文件由文件系統(tǒng)中的 File對象 file命名。
read()-->int
每次讀取一個字節(jié)葫掉。返回值就是讀入的數(shù)據(jù)本身些举。如果讀到文件的末尾了,-1俭厚。
read(byte[] bs)-->int
每次讀取多個字節(jié)户魏,最多是bs數(shù)組的長度個。返回值是本次讀取的實際的字節(jié)個數(shù)。如果到達末尾叼丑,-1.
int read(byte[] bs, int off, int len)
從該輸入流讀取最多 len字節(jié)的數(shù)據(jù)為字節(jié)數(shù)組 关翎。第一個參數(shù)表示要存儲本地讀取的數(shù)據(jù)的數(shù)組,第二個參數(shù)鸠信,表示從哪個下標開始存儲纵寝,第三個參數(shù)是表示本次讀取預(yù)計的讀取數(shù)量。該方法的返回值是本次讀取的實際數(shù)量星立。如果到達文件末尾爽茴,-1。
byte[] bs = new byte[3];//內(nèi)存資源
數(shù)據(jù)源:250個字節(jié)
數(shù)組:100個長度
1次:100绰垂,剩150 讀取100個
2次:100室奏,剩50 讀取100個
3次:50,讀完了 讀取50個
int read(byte[] bs) -->讀多個劲装,最多數(shù)組長度胧沫,實際看返回值,數(shù)據(jù)在數(shù)組中占业,將讀取到的數(shù)據(jù)存入到數(shù)組中绒怨,默認從頭開始存儲。
在操作IO流讀取本地文件的數(shù)據(jù)谦疾,提升效率南蹂。
硬盤和內(nèi)存
read()-->每次讀取一個數(shù)據(jù),
read(byte[] bs)--> 1000
每次讀取一個字節(jié):
使用字節(jié)數(shù)組作為緩沖區(qū)餐蔬,讀取數(shù)據(jù):
2.4碎紊、FileOutputStream
構(gòu)造方法:
FileOutputStream(String name) ,在文件開頭寫佑附,擦除寫
創(chuàng)建文件輸出流以指定的名稱寫入文件樊诺。
FileOutputStream(String name, boolean append) ,在文件的末尾寫數(shù)據(jù)音同,追加
創(chuàng)建文件輸出流以指定的名稱寫入文件词爬。
FileOutputStream(File file) ,在文件開頭寫权均,擦除寫
創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件顿膨。
FileOutputStream(File file, boolean append) ,在文件的末尾寫數(shù)據(jù)叽赊,追加
創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件恋沃。
寫出去的數(shù)據(jù),是清空寫必指。將文件中原來的數(shù)據(jù)全部擦除囊咏,從頭開始寫數(shù)據(jù)。
void write(int data),將參數(shù)梅割,這個字節(jié)數(shù)據(jù)寫出去
void write(byte[] b),將 b.length個字節(jié)從指定的字節(jié)數(shù)組寫入此文件輸出流霜第。
void write(byte[] b, int off, int len) ,將 len字節(jié)從位于偏移量 off的指定字節(jié)數(shù)組寫入此文件輸出流。
String--->byte[]
String--->char[]
思考題:
1户辞、向文件中寫數(shù)據(jù)的時候泌类,如果文件不存在,能寫嗎底燎?如果文件所在的文件夾不存在刃榨,能寫嗎?
? 如果文件不存在双仍,F(xiàn)ileOutputStream在寫出數(shù)據(jù)的時候喇澡,會先創(chuàng)建文件,再寫出殊校。
? 但是如果文件夾不存在晴玖,那么就報錯。(java.io.FileNotFoundException: C:\Ruby\pro\aa\bb\abc.txt (系統(tǒng)找不到指定的路徑为流。)
2呕屎、能不清空的寫,屁股后面寫敬察,不擦除原來的數(shù)據(jù)秀睛?
? FileOutputStream(path)-->開頭寫
? FileOutputStream(path , append-->true)-->末尾寫