更新時(shí)間:2020-09-14 17:05:24 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3087次
一.練習(xí)的題目
(一)在電腦D盤下創(chuàng)建一個(gè)文件為HelloWorld.txt文件,判斷他是文件還是目錄,在創(chuàng)建一個(gè)目錄IOTest,之后將HelloWorld.txt移動(dòng)到IOTest目錄下去;之后遍歷IOTest這個(gè)目錄下的文件:
package?com.xykj.lesson1;??
??
import?java.io.File;??
import?java.io.IOException;??
??
??
public?class?Test1?{??
????/**??
?????*?1.?在電腦D盤下創(chuàng)建一個(gè)文件為HelloWorld.txt文件,??
?????*?判斷他是文件還是目錄,再創(chuàng)建一個(gè)目錄IOTest,??
?????*?之后將HelloWorld.txt移動(dòng)到IOTest目錄下去;??
?????*?之后遍歷IOTest這個(gè)目錄下的文件??
?????*???
?????*?程序分析:??
?????*?1、文件創(chuàng)建使用File的createNewFile()方法??
?????*?2、判斷是文件用isFile(),判斷是目錄用isDirectory??
?????*?3、創(chuàng)建目錄用:mkdirs()方法??
?????*?4、移動(dòng)文件用:renameTo??
?????*?5、遍歷目錄用:list()方法獲得存放文件的數(shù)組,foreach遍歷的方法把文件打印出來(lái)??
?????*?*/??
????public?static?void?main(String[]?args)?{??
?????????//在電腦D盤下創(chuàng)建一個(gè)文件為HelloWorld.txt文件??
????????File?file=new?File("D:","HelloWorld.txt");??
??????????
????????//創(chuàng)建文件,返回一個(gè)布爾值??
????????boolean?isCreate;??
????????try?{??
????????????isCreate?=?file.createNewFile();??
????????????if?(isCreate)?{??
????????????????System.out.println("創(chuàng)建文件成功!");??
????????????}else?{??
????????????????System.out.println("創(chuàng)建文件失敗!文件已經(jīng)存在");??
????????????}??
????????}?catch?(IOException?e)?{??
????????????System.out.println("創(chuàng)建文件失敗!");??
????????}??
??????????
????????//?判斷他是文件還是目錄,??
????????if?(file.isFile())?{??
????????????System.out.println("這是一個(gè)文件");??
????????}?else?{??
????????????System.out.println("這是一個(gè)目錄");??
????????}??
??????????
????????//再創(chuàng)建一個(gè)目錄IOTest??
????????File?file2=new?File("D:/IOTest");??
????????file2.mkdirs();??
??????????
????????//HelloWorld.txt移動(dòng)到IOTest目錄下去?失?。俊??
????????if?(file.renameTo(file2))?{??
????????????System.out.println("文件移動(dòng)成功!");??
????????}?else?{??
????????????System.out.println("文件移動(dòng)失敗");??
????????}??
??????????
????????//遍歷IOTest目錄下的文件??
????????String[]?arr=file2.list();??
????????for?(String?string?:?arr)?{??
????????????System.out.println(string);??
????????}??
????}??
}
//上面移動(dòng)文件要指明文件路徑和文件名
上面的file.renameTo(file2)改為:
file.renameTo(file2.getPath + "/" + file.getName());
就不會(huì)有錯(cuò)了。
(二) 遞歸實(shí)現(xiàn)輸入任意目錄,列出文件以及文件夾,效果看圖
1.先建一個(gè)FileUtile工具類
package?com.xykj.lesson2;??
??
import?java.io.File;??
import?java.util.ArrayList;??
import?java.util.List;??
????/**??
?????*?這是一個(gè)獲取目錄下所有文件夾內(nèi)的所有文件的封裝類??
?????*?當(dāng)然前提是你要傳進(jìn)來(lái)一個(gè)正確路徑的文件夾??
?????*?*/??
public?class?FileUtils?{??
??????
????//獲取文件夾下所有的文件??
????public?static?List?getAllFiles(String?dir){??
??????????
????????//創(chuàng)建一個(gè)集合存放遍歷到的File??
????????List<?File?>files=new?ArrayList();??
??????????
????????File?file=new?File(dir);??
????????//文件夾必須存在????????????????并且要是文件夾??
????????if?(file.exists()&&file.isDirectory())?{??
????????????//重點(diǎn)!????這里要本身一直遍歷??
????????????longErgodic(file,files);//把遍歷得到的東西存放在files里面??
????????}??
????????return?files;??
????}??
??????
????//重點(diǎn)理解,這是一個(gè)遞歸方法,會(huì)不斷來(lái)回調(diào)用本身,但是所有獲得的數(shù)據(jù)都會(huì)存放在集合files里面??
????private?static?void?longErgodic(File?file,?List?files)?{??
??????????
????????//.listFiles()方法的使用??
????????//把文件夾的所有文件(包括文件和文件名)都放在一個(gè)文件類的數(shù)組里面???
????????File[]?fillArr=file.listFiles();??
??????????
????????//如果是一個(gè)空的文件夾??
?????????if?(fillArr==null)?{??
?????????????//后面的不執(zhí)行,直接返回??
????????????return;??
????????}??
???????????
????????//如果文件夾有內(nèi)容,遍歷里面的所有文件(包括文件夾和文件),都添加到集合里面??
?????????for?(File?file2?:?fillArr)?{??
???????????????
?????????????//如果只是想要里面的文件或者文件夾或者某些固定格式的文件可以判斷下再添加??
?????????????files.add(file2);??
???????????????
?????????????//添加到集合后,在來(lái)判斷是否是文件夾,再遍歷里面的所有文件??
?????????????//方法的遞歸??
?????????????longErgodic(file2,?files);??
????????}??
????}??
}??
2.再建一個(gè)主方法調(diào)用類
package?com.xykj.lesson2;??
??
import?java.io.File;??
import?java.util.List;??
??
public?class?Test2?{??
????/**??
?????*?遞歸實(shí)現(xiàn)輸入任意目錄,列出文件以及文件夾??
?????*???
?????*?設(shè)計(jì):在FileUtils類里面實(shí)現(xiàn)了邏輯操作,在另一邊調(diào)用就可以了??
?????*?*/??
????public?static?void?main(String[]?args)?{??
?????????//比如輸入D盤??
????????Listlist=FileUtils.getAllFiles("D:");??
????????//輸出所有的文件和文件夾的名字??
????????for?(File?file?:?list)?{??
????????????System.out.println(file);??
????????}??
??
????}??
??
}??
(三) 遞歸實(shí)現(xiàn)列出當(dāng)前工程下所有.java文件
package?com.xykj.lesson3;??
??
import?java.io.File;??
import?java.util.List;??
??
import?com.xykj.lesson2.FileUtils;??
??
public?class?Test3?{??
????/**??
?????*?遞歸實(shí)現(xiàn)列出當(dāng)前工程下所有.java文件??
?????*?還是要題目2的遍歷文件的工具類來(lái)獲取所有的文件,再過(guò)濾.java文件就可以了??
?????*?當(dāng)前目錄的地址:輸入.就可以獲取??
?????*?*/??
????public?static?void?main(String[]?args)?{??
?????????//輸入.??獲取當(dāng)前文件的?所有文件??
????????Listlist=FileUtils.getAllFiles(".");??
????????//輸出.java后綴的文件的名字??
????????for?(File?file?:?list)?{??
????????????if?(file.toString().endsWith(".java"))?{??
????????????????System.out.println(file.getName());??
????????????}??
????????}??
??
????}??
??
}??
(四)從磁盤讀取一個(gè)文件到內(nèi)存中,再打印到控制臺(tái)
package?com.xykj.lesson4;??
??
import?java.io.File;??
import?java.io.FileInputStream;??
??
public?class?Tset4?{??
????/**??
?????*?從磁盤讀取一個(gè)文件到內(nèi)存中,再打印到控制臺(tái)??
?????*???
?????*?程序設(shè)計(jì):??
?????*?1、讀取文件用到FileinputSteam???
?????*?2、把讀取的內(nèi)容不斷加入到StringBuffer,??
?????*?3、再把StringBuffer打印出來(lái)就可以??
?????*?*/??
????public?static?void?main(String[]?args)?{??
??
????????//?讀取D:\notePad\aa.txt里面的內(nèi)容??
????????File?file?=?new?File("D:\\notePad\\aa.txt");??
????????try?{??
????????????//?創(chuàng)建讀取流即輸入流??
????????????FileInputStream?fis?=?new?FileInputStream(file);??
????????????int?len?=?0;??
????????????byte[]?buf?=?new?byte[1024];??
????????????StringBuffer?sb?=?new?StringBuffer();??
????????????//?把讀取的數(shù)據(jù)添加到StringBuffer里面??
????????????while?((len?=?fis.read(buf))?!=?-1)?{??
????????????????sb.append(new?String(buf,?0,?len));??
????????????}??
????????????//?把StringBuffer里面的內(nèi)容打印出來(lái)??
????????????System.out.println(sb);??
????????????fis.close();??
????????}?catch?(Exception?e)?{??
????????????e.printStackTrace();??
????????}??
????}??
}
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java io流編程練習(xí)題,你都會(huì)做嗎”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)