Java IO流经典练习题(mark用)
一.練習的題目
(一)在電腦D盤下創(chuàng)建一個文件為HelloWorld.txt文件,判斷他是文件還是目錄,在創(chuàng)建一個目
錄IOTest,之后將HelloWorld.txt移動到IOTest目錄下去;之后遍歷IOTest這個目錄下的文
件
(二)遞歸實現(xiàn)輸入任意目錄,列出文件以及文件夾,效果看圖
(三)遞歸實現(xiàn)列出當前工程下所有.java文件
(四)從磁盤讀取一個文件到內(nèi)存中,再打印到控制臺
(五)在程序中寫一個"HelloJavaWorld你好世界"輸出到操作系統(tǒng)文件Hello.txt文件中
(六)拷貝一張圖片,從一個目錄到另外一個目錄下(PS:是拷貝是不是移動)
(七)統(tǒng)計一個文件calcCharNum.txt(見附件)中字母'A'和'a'出現(xiàn)的總次數(shù)
(八)統(tǒng)計一個文件calcCharNum.txt(見附件)中各個字母出現(xiàn)次數(shù):
A(8),B(16),C(10)...,a(12),b(10),c(3)....,括號內(nèi)代表字符出現(xiàn)次數(shù);
(九)統(tǒng)計一個文件calcCharNum2.txt(見附件)中各個字母出現(xiàn)次數(shù):
A(8),B(16),C(10)...,a(12),b(10),c(3)....中(5),國(6),括號內(nèi)代表字符出現(xiàn)次數(shù);
(十)使用隨機文件流類RandomAccessFile將一個文本文件倒置讀出。
(十一)編寫一個Java應用程序,可以實現(xiàn)Dos中的type命令,并加上行號。
即將文本文件在控制臺上顯示出來,并在每一行的前面加上行號。
(十二)輸入兩個文件夾名稱,將A文件夾內(nèi)容全部拷貝到B文件夾,要求使用多線程來操作。
(十三)查看D盤中所有的文件和文件夾名稱,并且使用名稱升序降序,文件夾在前和文件夾在
后,文件大小排序等。
二.詳細的解題過程
(一)第一題
[plain]view plaincopy
?print?
packagecom.xykj.lesson1;
importjava.io.File;
importjava.io.IOException;
publicclassTest1{
/**
*1.在電腦D盤下創(chuàng)建一個文件為HelloWorld.txt文件,
*判斷他是文件還是目錄,再創(chuàng)建一個目錄IOTest,
*之后將HelloWorld.txt移動到IOTest目錄下去;
*之后遍歷IOTest這個目錄下的文件
*
*程序分析:
*1、文件創(chuàng)建使用File的createNewFile()方法
*2、判斷是文件用isFile(),判斷是目錄用isDirectory
*3、創(chuàng)建目錄用:mkdirs()方法
*4、移動文件用:renameTo
*5、遍歷目錄用:list()方法獲得存放文件的數(shù)組,foreach遍歷的方法把文件打印出來
**/
publicstaticvoidmain(String[]args){
//在電腦D盤下創(chuàng)建一個文件為HelloWorld.txt文件
Filefile=newFile("D:","HelloWorld.txt");
//創(chuàng)建文件,返回一個布爾值
booleanisCreate;
try{
isCreate=file.createNewFile();
if(isCreate){
System.out.println("創(chuàng)建文件成功!");
}else{
System.out.println("創(chuàng)建文件失敗!文件已經(jīng)存在");
}
}catch(IOExceptione){
System.out.println("創(chuàng)建文件失敗!");
}
//判斷他是文件還是目錄,
if(file.isFile()){
System.out.println("這是一個文件");
}else{
System.out.println("這是一個目錄");
}
//再創(chuàng)建一個目錄IOTest
Filefile2=newFile("D:/IOTest");
file2.mkdirs();
//HelloWorld.txt移動到IOTest目錄下去?失敗?》
if(file.renameTo(file2)){
System.out.println("文件移動成功!");
}else{
System.out.println("文件移動失敗");
}
//遍歷IOTest目錄下的文件
String[]arr=file2.list();
for(Stringstring:arr){
System.out.println(string);
}
}
}
//上面移動文件要指明文件路徑和文件名
上面的file.renameTo(file2)改為:
file.renameTo(file2.getPath + "/" + file.getName());
就不會有錯了。
(二)第二題
1.先建一個FileUtile工具類
[plain]view plaincopy
?print?
packagecom.xykj.lesson2;
importjava.io.File;
importjava.util.ArrayList;
importjava.util.List;
/**
*這是一個獲取目錄下所有文件夾內(nèi)的所有文件的封裝類
*當然前提是你要傳進來一個正確路徑的文件夾
**/
publicclassFileUtils{
//獲取文件夾下所有的文件
publicstaticList<file>getAllFiles(Stringdir){
//創(chuàng)建一個集合存放遍歷到的File
List<File>files=newArrayList<file>();
Filefile=newFile(dir);
//文件夾必須存在并且要是文件夾
if(file.exists()&&file.isDirectory()){
//重點!這里要本身一直遍歷
longErgodic(file,files);//把遍歷得到的東西存放在files里面
}
returnfiles;
}
//重點理解,這是一個遞歸方法,會不斷來回調(diào)用本身,但是所有獲得的數(shù)據(jù)都會存放在集合files里面
privatestaticvoidlongErgodic(Filefile,List<file>files){
//.listFiles()方法的使用
//把文件夾的所有文件(包括文件和文件名)都放在一個文件類的數(shù)組里面
File[]fillArr=file.listFiles();
//如果是一個空的文件夾
if(fillArr==null){
//后面的不執(zhí)行,直接返回
return;
}
//如果文件夾有內(nèi)容,遍歷里面的所有文件(包括文件夾和文件),都添加到集合里面
for(Filefile2:fillArr){
//如果只是想要里面的文件或者文件夾或者某些固定格式的文件可以判斷下再添加
files.add(file2);
//添加到集合后,在來判斷是否是文件夾,再遍歷里面的所有文件
//方法的遞歸
longErgodic(file2,files);
}
}
}
</file></file></file>
2.再建一個主方法調(diào)用類
[plain]view plaincopy
?print?
packagecom.xykj.lesson2;
importjava.io.File;
importjava.util.List;
publicclassTest2{
/**
*遞歸實現(xiàn)輸入任意目錄,列出文件以及文件夾
*
*設(shè)計:在FileUtils類里面實現(xiàn)了邏輯操作,在另一邊調(diào)用就可以了
**/
publicstaticvoidmain(String[]args){
//比如輸入D盤
List<file>list=FileUtils.getAllFiles("D:");
//輸出所有的文件和文件夾的名字
for(Filefile:list){
System.out.println(file);
}
}
}
</file>
(三)第三題
[plain]view plaincopy
?print?
packagecom.xykj.lesson3;
importjava.io.File;
importjava.util.List;
importcom.xykj.lesson2.FileUtils;
publicclassTest3{
/**
*遞歸實現(xiàn)列出當前工程下所有.java文件
*還是要題目2的遍歷文件的工具類來獲取所有的文件,再過濾.java文件就可以了
*當前目錄的地址:輸入.就可以獲取
**/
publicstaticvoidmain(String[]args){
//輸入.獲取當前文件的所有文件
List<file>list=FileUtils.getAllFiles(".");
//輸出.java后綴的文件的名字
for(Filefile:list){
if(file.toString().endsWith(".java")){
System.out.println(file.getName());
}
}
}
}
</file>
(四)第四題
[plain]view plaincopy
?print?
packagecom.xykj.lesson4;
importjava.io.File;
importjava.io.FileInputStream;
publicclassTset4{
/**
*從磁盤讀取一個文件到內(nèi)存中,再打印到控制臺
*
*程序設(shè)計:
*1、讀取文件用到FileinputSteam
*2、把讀取的內(nèi)容不斷加入到StringBuffer,
*3、再把StringBuffer打印出來就可以
**/
publicstaticvoidmain(String[]args){
//讀取D:
otePadaa.txt里面的內(nèi)容
Filefile=newFile("D:\notePad\aa.txt");
try{
//創(chuàng)建讀取流即輸入流
FileInputStreamfis=newFileInputStream(file);
intlen=0;
byte[]buf=newbyte[1024];
StringBuffersb=newStringBuffer();
//把讀取的數(shù)據(jù)添加到StringBuffer里面
while((len=fis.read(buf))!=-1){
sb.append(newString(buf,0,len));
}
//把StringBuffer里面的內(nèi)容打印出來
System.out.println(sb);
fis.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
(五)第五題
[plain]view plaincopy
?print?
packagecom.xykj.lesson5;
importjava.io.File;
importjava.io.FileOutputStream;
publicclassTest5{
/**
*在程序中寫一個"HelloJavaWorld你好世界"輸出到操作系統(tǒng)文件Hello.txt文件中
*
*程序分析:文件寫入,要用到輸出流FileOutputStream
**/
publicstaticvoidmain(String[]args){
//向文件D:/Hello.txt,寫入內(nèi)容
Filefile=newFile("D:/Hello.txt");
try{
//創(chuàng)建輸出流
FileOutputStreamfos=newFileOutputStream(file);
//把String類型的字符串轉(zhuǎn)化為byte數(shù)組的數(shù)據(jù)保存在輸出流中
fos.write("HelloJavaWorld你好世界".getBytes());
fos.flush();//刷新輸出流
fos.close();//關(guān)閉輸出流
}catch(Exceptione){
e.printStackTrace();
}
}
}
(六)第六題
[plain]view plaincopy
?print?
packagecom.xykj.lesson6;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
publicclassTest6{
/**
*拷貝一張圖片,從一個目錄到另外一個目錄下(PS:是拷貝是不是移動)
*
*程序設(shè)計思路:
*這題不能使用renameTo,
*解題步驟:
*1、在目的地址創(chuàng)建一個圖片文件
*2、讀取源地址文件的字節(jié)流
*3、把讀取到的字節(jié)流寫入到目的地址的文件里面
*4、刷新輸出流,并關(guān)閉就可以了
*
*@throwsException
**/
publicstaticvoidmain(String[]args){
//本題示范把D盤下的mm.jpg復制到D盤java文件夾里面
//源文件地址
FilefileFrom=newFile("D:/mm.jpg");
//目的文件地址
FilefileTo=newFile("D:/java/mm.jpg");
//1、創(chuàng)建目的文件地址
try{
if(!fileTo.createNewFile()){
System.out.println("創(chuàng)建文件失敗!");
}
//2、讀取源地址文件的字節(jié)流
FileInputStreamfis=newFileInputStream(fileFrom);
FileOutputStreamfos=newFileOutputStream(fileTo);
intlen=0;
byte[]buf=newbyte[1024];
while((len=fis.read(buf))!=-1){
//3、把讀取到的字節(jié)流寫入到目的地址的文件里面
fos.write(buf,0,len);
}
//刷新下輸出流
fos.flush();
//關(guān)閉輸入流和輸出流
fis.close();
fos.close();
System.out.println("文件復制成功!");
}catch(Exceptione){
e.printStackTrace();
}
}
}
(七)第七題
[plain]view plaincopy
?print?
packagecom.xykj.lesson7;
importjava.io.File;
importjava.io.FileInputStream;
publicclassTest7{
/**
*統(tǒng)計一個文件calcCharNum.txt(見附件)中字母'A'和'a'出現(xiàn)的總次數(shù)
*
*程序分析:
*讀取文件用FileInputStream
*一次只讀一個字節(jié)(一個字母就是一個字節(jié)),當字節(jié)內(nèi)容和A或a相等時,相應的數(shù)量加1
**/
publicstaticvoidmain(String[]args){
try{
//添加文件路徑
Filefile=newFile("D:/java/calcCharNum.txt");
//創(chuàng)建文件讀取流
FileInputStreamfis=newFileInputStream(file);
intnumA=0;//字母A的數(shù)量
intnuma=0;//字母a的數(shù)量
intlen=0;//每次讀取的字節(jié)數(shù)量
while((len=fis.read())!=-1){
//統(tǒng)計字母a的數(shù)量
if(newString((char)len+"").equals("a")){
numa++;
}
//統(tǒng)計字母A的數(shù)量
if(newString((char)len+"").equals("A")){
numA++;
}
}
//打印出文件內(nèi)字母的數(shù)量
System.out.println("a的數(shù)量是:"+numa);
System.out.println("A的數(shù)量是:"+numA);
System.out.println("a和A出現(xiàn)的總次數(shù):"+(numA+numa));
fis.close();//關(guān)閉輸入流
}catch(Exceptione){
e.printStackTrace();
}
}
}
(八)第八題
[plain]view plaincopy
?print?
packagecom.xykj.lesson8;
importjava.io.File;
importjava.io.FileInputStream;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map.Entry;
publicclassTest8{
/**
*統(tǒng)計一個文件calcCharNum.txt(見附件)中各個字母出現(xiàn)次數(shù):
*A(8),B(16),C(10)...,a(12),b(10),c(3)....,括號內(nèi)代表字符出現(xiàn)次數(shù);
*
*程序分析:
*1.這里沒中文字符,依然可以只用字節(jié)流來讀取文件
*2.不能保存相同的主鍵值,可以使用HashMap:key-value來實現(xiàn)
*3.先獲得該key的value,如果存在key的話value的值加1
**/
publicstaticvoidmain(String[]args){
//文件路徑
Filefile=newFile("D:/java/calcCharNum.txt");
try{
//創(chuàng)建讀取文件的輸入流
FileInputStreamfis=newFileInputStream(file);
//創(chuàng)建集合HashMap類存放要保存的key-value
HashMap<string,integer="">map=newHashMap<>();
//讀取文件
intlen=0;//每次讀取的文件長度
intcount=0;
while((len=fis.read())!=-1){
//每次獲取到的字母
charc=(char)len;
//這里使用trycatch是因為map.get(c+""),第一次get不到東西會出現(xiàn)空指針
try{
//通過每次的key值獲取它的value值,
//但是在它的key值沒有時或報空指針錯誤,所以要trycatch處理
//當她有key值,就可以獲取到相應的value值
count=map.get(c+"");
}catch(Exceptione){//什么都不用輸出
}
//如果有它的key值對應的value值要加1
map.put(c+"",count+1);
}
fis.close();
//讀完后把結(jié)果打印出來
//迭代器的使用
Iterator<entry<string,integer="">>iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Entry<string,integer="">entry=iterator.next();
System.out.print(entry.getKey()+"("+entry.getValue()+") ");
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
</string,></entry<string,></string,>
其實本題也可以直接用字符流來讀取的。
(九)第九題
[plain]view plaincopy
?print?
packagecom.xykj.lesson9;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map.Entry;
publicclassTest9{
/**
*統(tǒng)計一個文件calcCharNum2.txt(見附件)中各個字母出現(xiàn)次數(shù):
*A(8),B(16),C(10)...,a(12),b(10),c(3)....中(5),國(6),
*括號內(nèi)代表字符出現(xiàn)次數(shù);
*
*程序分析:
*1.這出現(xiàn)中文字符,依然只能用字符流來讀取文件
*2.不能保存相同的主鍵值,可以使用HashMap:key-value來實現(xiàn)
*3.先獲得該key的value,如果存在key的話value的值加1
**/
publicstaticvoidmain(String[]args){
//文件路徑
Filefile=newFile("D:/java/calcCharNum2.txt");
//創(chuàng)建集合HashMap類存放要保存的key-value
HashMap<string,integer="">map=newHashMap<>();
try{
//創(chuàng)建字符流
FileReaderfr=newFileReader(file);
//每次讀取的字符長度
intlen=0;
intcount=0;//出現(xiàn)該字符的次數(shù)
while((len=fr.read())!=-1){
//獲取對應的字符
charc=(char)len;
try{
//通過每次的key值獲取它的value值,
//但是在它的key值沒有時或報空指針錯誤,所以要trycatch處理
//當她有key值,就可以獲取到相應的value值
count=map.get(c+"");
}catch(Exceptione){//什么都不用輸出
}
//如果有它的key值對應的value值要加1
map.put(c+"",count+1);
}
//讀完后把結(jié)果打印出來
Iterator<entry<string,integer="">>iterator=map.entrySet().iterator();
//迭代器的使用
while(iterator.hasNext()){
Entry<string,integer="">entry=iterator.next();
System.out.print(entry.getKey()+"("+entry.getValue()+") ");
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
</string,></entry<string,></string,>
(十)第十題
[plain]view plaincopy
?print?
packagecom.xykj.lesson10;
importjava.io.File;
importjava.io.RandomAccessFile;
publicclassTest10{
/**
*使用隨機文件流類RandomAccessFile將一個文本文件倒置讀出。
*
*程序分析:
*RandomAccessFile的seek方法能把讀取文件的光標移動到具體的位置
*但是還是有地點值得注意的是一個字母或數(shù)字是占用一個字節(jié)的,一個漢字是占用兩個字節(jié)的
**/
publicstaticvoidmain(String[]args){
//要讀取的文件的地址
Filefile=newFile("D:/java/calcCharNum2.txt");
try{
RandomAccessFileraf=newRandomAccessFile(file,"r");
longlength=raf.length();
StringBuffersb=newStringBuffer();
while(length>0){
length--;
raf.seek(length);
intc=(char)raf.readByte();
//如果asc碼<=255,>=0,則判斷是個英文字符,添加到字符串中.
if(c>=0&&c<=255){
sb.append((char)c);
}else{
//如果不在asc碼范圍內(nèi),則判斷是個漢字字符
//漢字字符是占2個字節(jié)的,所以length再退一個字節(jié)
length--;
raf.seek(length);
byte[]cc=newbyte[2];
//cc被復制為文件中連續(xù)的兩個字節(jié)
raf.readFully(cc);
sb.append(newString(cc));
}
}
System.out.println(sb);
raf.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}
(十一)第十一題
[plain]view plaincopy
?print?
packagecom.xykj.lesson1;
importjava.io.File;
importjava.io.IOException;
publicclassTest1{
/**
*1.在電腦D盤下創(chuàng)建一個文件為HelloWorld.txt文件,
*判斷他是文件還是目錄,再創(chuàng)建一個目錄IOTest,
*之后將HelloWorld.txt移動到IOTest目錄下去;
*之后遍歷IOTest這個目錄下的文件
*
*程序分析:
*1、文件創(chuàng)建使用File的createNewFile()方法
*2、判斷是文件用isFile(),判斷是目錄用isDirectory
*3、創(chuàng)建目錄用:mkdirs()方法
*4、移動文件用:renameTo
*5、遍歷目錄用:list()方法獲得存放文件的數(shù)組,foreach遍歷的方法把文件打印出來
**/
publicstaticvoidmain(String[]args){
//在電腦D盤下創(chuàng)建一個文件為HelloWorld.txt文件
Filefile=newFile("D:","HelloWorld.txt");
//創(chuàng)建文件,返回一個布爾值
booleanisCreate;
try{
isCreate=file.createNewFile();
if(isCreate){
System.out.println("創(chuàng)建文件成功!");
}else{
System.out.println("創(chuàng)建文件失敗!文件已經(jīng)存在");
}
}catch(IOExceptione){
System.out.println("創(chuàng)建文件失敗!");
}
//判斷他是文件還是目錄,
if(file.isFile()){
System.out.println("這是一個文件");
}else{
System.out.println("這是一個目錄");
}
//再創(chuàng)建一個目錄IOTest
Filefile2=newFile("D:/IOTest");
file2.mkdirs();
//HelloWorld.txt移動到IOTest目錄下去?失敗?》
if(file.renameTo(file2)){
System.out.println("文件移動成功!");
}else{
System.out.println("文件移動失敗");
}
//遍歷IOTest目錄下的文件
String[]arr=file2.list();
for(Stringstring:arr){
System.out.println(string);
}
}
}
(十二)第十二題
[plain]view plaincopy
?print?
packagecom.xykj.lesson12;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.util.List;
importjava.util.Scanner;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
importcom.xykj.lesson2.FileUtils;
publicclassTest12{
/*
*輸入兩個文件夾名稱,將A文件夾內(nèi)容全部拷貝到B文件夾,要求使用多線程來操作。
*
*程序分析:
*1.拷貝文件里面的東西,要分析的東西還是蠻多的,要先建文件夾再拷貝里面的東西,而且要一層層的來搞
*2.這里也需要文件遍歷工具,直接調(diào)用第二題的工具類,不再重寫
*3.多線程的使用,可以直接在方法里面直接新建線程
*4.對整個文件夾進行復制文件夾分隔符可以用\或/,其他的都是不對的
*所有其中還對輸入的分割符進行了替換
*這題看起來比較長,分開看其實也不長
**/
publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
System.out.println("要復制的文件夾:");
StringfromDir=scanner.next();//接收輸入
System.out.println("要復制到哪里去:");
StringtoDir=scanner.next();//接收輸入
//把輸入的地址轉(zhuǎn)化為File類型
FilefromFile=newFile(fromDir);
FiletoFile=newFile(toDir);
//新建線程
newThread(){
//里面做實際操作
publicvoidrun(){
//判斷如果要復制的是文件,直接復制就可以了
if(fromFile.isFile()){
System.out.println("復制單個文件");
copy(fromFile,toFile);
}else{
//要復制文件夾
//要防止一種無法進行的復制:比如說,要把復制的文件復制到自己的子文件夾里面
//舉個例子:把D:/java/jsp文件夾復制到D:/java/jsp/js文件夾里面,
//這會導致子文件不斷增加的同時,而父文件也要不斷增加,的一個死循環(huán)
//如果反過來,就沒事,相當于只是簡單的覆蓋而已
//具體實現(xiàn)就是看:目的地地址包含復制的文件夾地址,就不允許操作
if(toDir.replace("/","\").toLowerCase()
.startsWith(fromDir.replace("/","\").toLowerCase())){
return;
}
//復制文件(包括文件和文件夾)操作
//先獲取所有的文件(包括文件和文件夾)
List<file>list=FileUtils.getAllFiles(fromDir);
//創(chuàng)建一個線程池,加快復制的速度
ExecutorServicethreadPool=Executors.newFixedThreadPool(20);
//需要對每一個文件的路徑進行處理
for(Filefile:list){
//復制文件名
Stringname=file.getAbsolutePath();
//把原來的文件路徑換成新的文件路徑
StringtoName=name.replace(fromFile.getParent(),toDir+"/");
System.out.println(name+"變成了"+toName);
//如果是文件夾,直接創(chuàng)建
if(file.isDirectory()){
newFile(toName).mkdirs();
}else{
//如果是文件,在線程里面復制
threadPool.execute(newRunnable(){
@Override
publicvoidrun(){
FilecopyFile=newFile(toName);
//先要有父文件夾
copyFile.getParentFile().mkdirs();
//開始復制文件
copy(file,copyFile);
}
});
}
}
}
scanner.close();
};
}.start();//開始線程
}
//復制文件的操作
publicstaticvoidcopy(FilefromFile,FiletoFile){
//定義一個輸入流
FileInputStreamfis=null;
//定義一個輸出流
FileOutputStreamfos=null;
try{
//把復制地址的File,封裝后賦值給輸入流對象
fis=newFileInputStream(fromFile);
//把目的地的File,封裝后復制給輸出流的對象
fos=newFileOutputStream(toFile);
//創(chuàng)建一個容量,
byte[]buf=newbyte[1024];
//每次讀取/寫入的字節(jié)長度
intlen=0;
//邊讀邊寫
while((len=fis.read(buf))!=-1){//判斷是否還能讀到數(shù)據(jù)
//把輸入放到輸出流里面
fos.write(buf,0,len);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
//關(guān)閉輸入流和輸出流
fis.close();
fos.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
</file>
(十三)第十三題
[plain]view plaincopy
?print?
packagecom.xykj.lesson13;
importjava.io.File;
importjava.util.Collections;
importjava.util.Comparator;
importjava.util.List;
importcom.xykj.lesson2.FileUtils;
publicclassTest13{
/**
*查看D盤中所有的文件和文件夾名稱,并且使用名稱升序降序,
*文件夾在前和文件夾在后,文件大小排序等。
*
*程序分析:
*1.查找文件和文件夾,需要例題二里遍歷文件的工具類(這里直接調(diào)用,不在重寫)
*2.排序需要用到list集合里面的Collections工具類類的sort方法
*3.這里有三重排序:首先是要按是否是文件夾來排序,然后按名稱來排序,最后按大小來排序
*其實這里還是會有問題的,按照某一個排序還沒事,但是三個都排序就不一定有效!
實際應用中也是只按一種排序就可以了的
**/
publicstaticvoidmain(String[]args){
List<file>list=FileUtils.getAllFiles("D:");
//按文件夾先顯示的順序:
Collections.sort(list,newComparator<file>(){
@Override
publicintcompare(Fileo1,Fileo2){
return(o2.isDirectory()?1:-1)-(o1.isDirectory()?1:-1);
}
});
//按文件名稱顯示的順序:
Collections.sort(list,newComparator<file>(){
@Override
publicintcompare(Fileo1,Fileo2){
return(o1.getName()).compareTo(o2.getName());
}
});
//按文件名稱顯示的順序:
Collections.sort(list,newComparator<file>(){
@Override
publicintcompare(Fileo1,Fileo2){
return(int)(o1.length()-o2.length());
}
});
//遍歷集合的文件
for(Filefile:list){
//打印排序后的文件或文件夾
System.out.println(file.getName());
}
}
}
</file></file></file></file>
以上是這些題目的詳細的解題過程,當然很多題目的解決方法不是固定的,
但是對于基本的解題方式還是要了解的。對于知識點的掌握的話,
文件的基本操作,讀取文件的基本方法,和寫文件的基本方法都是要掌握的,
還有字節(jié)流的讀取和字符流的讀取方式和用處也要會區(qū)分。
總結(jié)
以上是生活随笔為你收集整理的Java IO流经典练习题(mark用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米手机如何刷机如何在电脑上给手机刷机
- 下一篇: 无线路由器便携怎么使用路由器便携如何用