JavaSE各阶段练习题----文件和IO
1、鍵盤錄入一個文件夾路徑,刪除該文件夾(包含文件夾內容)
| import?java.io.File; ? public?class?Test01_刪除該文件夾 { ? public?static?void?main(String[] args) { ? File file?= new?File("d:/IO文檔/xxx"); deleteFile(file); ? } ? public?static?void?deleteFile(File file) { if?(file.exists()) { //判斷如果文件存在則,遍歷目錄下的所有文件 File[] files?= file.listFiles(); for?(File f?: files) { if?(f.isDirectory()) {//判斷時否為目錄 deleteFile(f);//遞歸調用 }else?{ System.out.println("刪除了文件:"?+ f.getName()); f.delete(); } } } System.out.println("刪除了目錄:"?+ file.getName());//刪除文件后,刪除目錄 file.delete(); } } ? |
?
?
2、鍵盤錄入一個文件夾路徑,統計該文件夾下的各種后綴名的文件的個數
例如:.txt有10個,.java有30個......
| public?class?Text02_統計文件夾下的后綴名的文件的個數 { public?static?void?main(String[] args) { System.out.println("請輸入一個文件路徑:"); Scanner sc?= new?Scanner(System.in); String filePath?= sc.nextLine(); ? File file?= new?File(filePath); //listFiles()遍歷目錄下的所有文件 ??list()遍歷目錄下所有文件名目錄下的子目錄不能遍歷到 File[] files?= file.listFiles(); Map<String, Integer> hMap?= new?HashMap<String, Integer>(); List<String> listEnd?= new?ArrayList<String>(); //d:/IO文檔/xxx //遍歷 for?(int?i?= 0; i?< files.length; i++) { String fileName?= files[i].getName(); String[] fileNames?= fileName.split("\\."); //將每一個文件名的后綴名添加到list中。 listEnd.add(fileNames[1]); } ? //.txt有10個,.java有30個......實現后綴名+個數 for?(int?i?= 0; i?< listEnd.size(); i++) { ? if?(hMap.get(listEnd.get(i)) == null) { hMap.put(listEnd.get(i), 1); }else?{ hMap.put(listEnd.get(i), hMap.get(listEnd.get(i))+1); } ? } //遍歷hMap Set<String> set?= hMap.keySet(); for?(String string?: set) { Integer value?= hMap.get(string); System.out.println(string?+ "有"?+ value?+ "個"); } ? } |
?
3、鍵盤錄入一個文件夾路徑,作為源文件夾;鍵盤錄入一個文件夾路徑,作為目標文件夾
寫代碼將源文件夾拷貝到目標文件夾中
a
b
b/a
| package?com.henu; ? import?java.io.*; import?java.util.Scanner; ? ? public?class?test { ?public?static?void?main(String[] args) throws?Exception { ? ????????Scanner scanner?= new?Scanner(System.in); ? ????????String srcDir?= scanner.next(); ????????String dir?= scanner.next(); ? ????????String[] split?= srcDir.split("\\\\"); ? ? ????????String tarDir?= dir?+ "\\"?+ split[split.length?- 1]; ???????? ????????File file?= new?File(tarDir); ????????file.mkdir(); ? ????????copyDirectory(new?File(srcDir),file); ????????System.out.println("拷貝成功"); ????} ? ????private?static?void?copyDirectory(File srcDir, File tarDir) throws?Exception { ? ????????File[] listFiles?= srcDir.listFiles(); ????????//判斷所選路徑是否為空 ????????if?(listFiles?== null) { ????????????return; ????????} ? ????????//循環遍歷目錄下每一個文件或文件夾 ????????for?(File file?: listFiles) { ? ????????????File srcFile?= file; ????????????File tarFile?= new?File(tarDir, file.getName()); ????????????//如果當前文件為文件夾,則遞歸; ????????????//否則拷貝文件 ????????????if?(file.isDirectory()) { ????????????????tarFile.mkdirs(); ????????????????copyDirectory(srcFile, tarFile); ????????????} else?{ ????????????????copyFile(srcFile, tarFile); ????????????} ????????} ????} ? ????public?static?void?copyFile(File srcFile, File tarFile) throws?Exception { ? ????????InputStream is?= new?FileInputStream(srcFile); ????????OutputStream os?= new?FileOutputStream(tarFile); ????????byte[] b?= new?byte[1024]; ????????int?len?= 0; ????????while?((len?= is.read(b)) != -1) { ????????????os.write(b, 0, len); ????????????os.flush(); ????????} ????????os.close(); ????????is.close(); ????} ? ? } |
?
4 在D盤下的a/b/c/d中創建一個文件,名稱叫HelloWorld.txt
| package?com.henu; ? import?java.io.File; import?java.io.IOException; ? public?class?Test04_創建一個文件 { ? public?static?void?main(String[] args) { ? File midir?= new?File("d:/a/b/c/d"); File file?= new?File("d:/a/b/c/d/HelloWorld.txt"); if?(!midir.exists()) { midir.mkdirs(); create(file); }else?{ create(file); } } public?static?void?create(File file) { if?(!file.exists()) { try?{ file.createNewFile(); } catch?(IOException e) { e.printStackTrace(); } System.out.println("創建成功"); }else?{ System.out.println("該文件已經存在"); } } } ? |
?
5 鍵盤錄入一個字符串,表示一個文件夾路徑,如果不是文件夾路徑則提示重新錄入
??打印當前文件夾下,所有的大于20M的后綴名是.wmv的文件的絕對路徑
| package?com.henu; ? import?java.io.File; import?java.io.FilenameFilter; import?java.util.ArrayList; import?java.util.List; ? /************************************************** ?* 鍵盤錄入一個字符串,表示一個文件夾路徑,如果不是文件夾路徑則提示重新錄入 ??打印當前文件夾下,所有的大于20M的后綴名是.wmv的文件的絕對路徑 ?*/ public?class?Test05_打印當前文件夾wmv { public?static?void?main(String[] args) { ? //如果你想輸出帶有判斷條件的文件,那么,需要對文件進行過濾,FilenameFilter接口 FilenameFilter filter?= new?FilenameFilter() { ? @Override public?boolean?accept(File dir, String name) { File currFile?= new?File(dir,name); if?(currFile.isFile() && name.endsWith(".jpg") && currFile.length()/1024 > 50L) { return?true; } return?false; } }; ? File file?= new?File("F:\\images"); if?(!file.isDirectory()) { System.out.println("不是文件夾路徑則提示重新錄入!!!"); }else?{ list.add(file.getAbsolutePath()); files(file); // System.out.println(list); } ? for?(int?i?= 0; i?< list.size(); i++) { String string?= list.get(i); // System.out.println(string); File[] files?= new?File(string).listFiles(filter); for?(File file2?: files) { System.out.println(file2.getAbsolutePath()); } } ? } //因為list.add每個目錄是,因為上面有遞歸,所以如果將list定義在方法內部, //會循環創建list,導致不是一個所有文件目錄的集合 static?List<String> list?= new?ArrayList<>(); public?static?void?files(File file) { File[] fs?= file.listFiles();//遍歷目錄下所有文件 for?(File f?: fs) { if?(f.isDirectory()) { files(f); list.add(f.getAbsolutePath()); } } } } ******************************************************************************* |
| package day8_1_作業; import java.io.File; import java.io.FileFilter; import java.util.Scanner; /*鍵盤錄入一個字符串,表示一個文件夾路徑,如果不是文件夾路徑則提示重新錄入 打印當前文件夾下,所有的大于20M的后綴名是.wmv的文件的絕對路徑*/ public class demo6 { ? public static void print(File file) { ? File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File f) { if((f.getName().endsWith(".txt")&&f.length()<1024)||f.isDirectory()) { return true; } return false; } }); for(File f:files) { if(f.isDirectory()) { print(f); }else { System.out.println(f.getAbsolutePath()); } } } ? public static void main(String[] args) throws Exception{ ? Scanner scanner = new Scanner(System.in); ? while(true) { String string = scanner.nextLine(); File file = new File(string); if(!file.isDirectory()) { System.out.println("不是文件夾路徑,請重新錄入:"); }else { print(file); break; } } } } |
?
6 用代碼實現以下需求
(1)有如下字符串"If you want to change your fate I think you must come to the ujiuye to learn java"(用空格間隔)
(2)打印格式:
to=3
think=1
you=2
//........
| package?com.henu; ? import?java.io.BufferedWriter; import?java.io.FileWriter; import?java.io.IOException; import?java.util.HashMap; import?java.util.Map; import?java.util.Map.Entry; import?java.util.Set; ? /* ?* (1)有如下字符串"If you want to change your fate I think you must come to the ujiuye?to learn java"(用空格間隔) (2)打印格式: to=3 think=1 you=2 //........ (3)按照上面的打印格式將內容寫入到D:\\count.txt文件中(要求用高效流) ?*/ public?class?Test06_高效流寫入 { ? public?static?void?main(String[] args) { ? String str?= "If you want to change your fate I think you must come to the ujiuye to learn java"; String[] sp?= str.split(" "); Map<String, Integer> hMap?= new?HashMap<String, Integer>(); for?(int?i?= 0; i?< sp.length; i++) { int?count?= hMap.containsKey(sp[i])?hMap.get(sp[i])+1:1; hMap.put(sp[i], count); } ? try?{ FileWriter fw?= new?FileWriter("D:/IO文檔/count.txt"); BufferedWriter bf?= new?BufferedWriter(fw); Set<Entry<String, Integer>> set?= hMap.entrySet(); ? for?(Entry<String, Integer> entry?: set) { String key?= entry.getKey(); Integer value?= entry.getValue(); String res?= key?+ "="?+ value; fw.write(res); fw.write("\r\n");//寫入換行 fw.flush(); } fw.close(); bf.close(); System.out.println("寫入完畢"); } catch?(IOException e) { e.printStackTrace(); } } ? } ? |
?
7、產生10個1-100的隨機數,并放到一個數組中
(1)把數組中大于等于10的數字放到一個list集合中,并打印到控制臺。
(2)把數組中的數字放到當前文件夾的number.txt文件中
| package?com.henu; ? import?java.io.BufferedInputStream; import?java.io.BufferedOutputStream; import?java.io.BufferedWriter; import?java.io.DataInputStream; import?java.io.DataOutputStream; import?java.io.File; import?java.io.FileInputStream; import?java.io.FileNotFoundException; import?java.io.FileOutputStream; import?java.io.FileWriter; import?java.util.ArrayList; import?java.util.Arrays; import?java.util.List; ? /* ?* 產生10個1-100的隨機數,并放到一個數組中 (1)把數組中大于等于10的數字放到一個list集合中,并打印到控制臺。 (2)把數組中的數字放到當前文件夾的number.txt文件中 ?*/ public?class?Test07_向文件夾放入數組 { ? public?static?void?main(String[] args) throws?Exception { ? int[] arr?= new?int[10]; List<Integer> list?= new?ArrayList<Integer>(); ? for?(int?i?= 0; i?< arr.length; i++) { int?x?= (int) (1+Math.random()*100); arr[i] = x; if?(x?>= 10) { list.add(x); } } System.out.println(Arrays.toString(arr)); //[16, 52, 2, 60, 43, 27, 23, 69, 74, 38] System.out.println(list); //[16, 52, 60, 43, 27, 23, 69, 74, 38] ? //將基本數據類型序列化和反序列化的類:DataOutputStream ?DataInputStream //不僅提供了讀寫各種基本數據類型的流,而且還提供了readUTF()和writeUTF() DataOutputStream dos?= new?DataOutputStream(new?FileOutputStream("d:/IO文檔/number.txt")); for?(Integer integer?: list) { dos.write(integer); dos.flush(); } dos.close(); System.out.println("寫入完畢"); //因為將數字寫入到.txt出現了亂碼所以將其讀出,看是否正確。 DataInputStream dis?= new?DataInputStream(new?FileInputStream("d:/IO文檔/number.txt")); int?len?= 0; while((len?= dis.read()) != -1) { System.out.print(len+"-"); } //16-52-60-43-27-23-69-74-38- dis.close(); ? } ? } ? |
?
總結
以上是生活随笔為你收集整理的JavaSE各阶段练习题----文件和IO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaSE各阶段练习题----Map
- 下一篇: JavaSE各阶段练习题----IO流