Java遞歸遍歷文件目錄代碼實(shí)例
這篇文章主要介紹了Java遞歸遍歷文件目錄代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在讀取文件降序輸出單詞及其個(gè)數(shù)的基礎(chǔ)上,將txt文件存入文件夾中,開始遞歸遍歷文件目錄,之后輸出txt文件中的單詞及其個(gè)數(shù),仍然是降序排列。
代碼如下
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Map; import java.util.Map.Entry; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; public class Traverse4 { public static void main(String[] args) { Traverse4 K = new Traverse4(); //調(diào)用遍歷方法 K.Run("E:\\article"); } //遞歸遍歷文件 public void Run(String AllFile) { File tfile = new File(AllFile); //構(gòu)建文件數(shù)組 File[] files = tfile.listFiles(); for(int i = 0; i < files.length; i++) { //判定該文件是否為目錄 if(files[i].isDirectory()) { //是,遞歸調(diào)用函數(shù) Run(files[i].getAbsolutePath()); }else { //不是,讀取文件輸出單詞個(gè)數(shù) System.out.println("**********"+files[i].getAbsolutePath()+"**********"); ReadFile(files[i].getAbsolutePath()); } } } //統(tǒng)計(jì)單詞個(gè)數(shù),排序,輸出 public void ReadFile(String fname) { File file=new File(fname); try { FileReader fr = new FileReader(file); BufferedReader bufr = new BufferedReader(fr); String s = null; //創(chuàng)建哈希表 Map<String,Integer> hm = new HashMap<>(); while((s=bufr.readLine())!=null){ //利用正則表達(dá)式分割出單詞 String[]strs = s.split("[^a-zA-Z0-9]"); //向哈希表存入單詞,統(tǒng)計(jì)個(gè)數(shù) for(int i = 0; i < strs.length; i++){ strs[i].toLowerCase(); if(!hm.containsKey(strs[i])){ hm.put(strs[i], 1); }else{ Integer counts = hm.get(strs[i]); hm.put(strs[i], counts+1); } } } //調(diào)用排序方法 sort(hm); bufr.close(); fr.close(); }catch(Exception e){ e.printStackTrace(); } } public void sort(Map<String,Integer>map) { //重寫List降序排序 List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet()); Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return (o2.getValue() - o1.getValue()); } }); //輸出 for (int i = 0; i < infoIds.size(); i++) { Entry<String, Integer> id = infoIds.get(i); System.out.println(id.getKey()+":"+id.getValue()); } } }
此次任務(wù)只需要編寫一個(gè)能夠?qū)崿F(xiàn)遞歸遍歷文件目錄的方法即可,重點(diǎn)還是統(tǒng)計(jì)單詞個(gè)數(shù)和排序輸出,這次統(tǒng)計(jì)與排序全部都由HashMap完成,統(tǒng)計(jì)方法是在編入單詞之前先使用containsKey()抓取已存在的鍵信息,若單詞存在其值+1,否則新構(gòu)建鍵,以值為1的形式存入該單詞。
排序則是重寫List方法實(shí)現(xiàn),輸出時(shí)要注意遍歷重寫后的List對(duì)象,如果遍歷的是之前創(chuàng)建的HashMap對(duì)象,得到的結(jié)果是沒有排序之前的數(shù)據(jù)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java 數(shù)據(jù)結(jié)構(gòu)之刪除鏈表中重復(fù)的結(jié)點(diǎn)
在一個(gè)排序的鏈表中,會(huì)存在重復(fù)的結(jié)點(diǎn),如何實(shí)現(xiàn)刪除該鏈表中重復(fù)的結(jié)點(diǎn),重復(fù)的結(jié)點(diǎn)不保留,并返回鏈表頭指針呢?接下來小編將帶你詳細(xì)介紹2021-12-12Java利用FileUtils讀取數(shù)據(jù)和寫入數(shù)據(jù)到文件
這篇文章主要介紹了Java利用FileUtils讀取數(shù)據(jù)和寫入數(shù)據(jù)到文件,下面文章圍繞FileUtils的相關(guān)資料展開怎么讀取數(shù)據(jù)和寫入數(shù)據(jù)到文件的內(nèi)容,具有一定的參考價(jià)值,徐婭奧德小伙伴可以參考一下2021-12-12springboot2.3.1替換為其他的嵌入式servlet容器的詳細(xì)方法
這篇文章主要介紹了springboot2.3.1替換為其他的嵌入式servlet容器的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07淺析SpringBoot微服務(wù)中異步調(diào)用數(shù)據(jù)提交數(shù)據(jù)庫(kù)的問題
這篇文章主要介紹了SpringBoot微服務(wù)中異步調(diào)用數(shù)據(jù)提交數(shù)據(jù)庫(kù)的問題,今天本文涉及到的知識(shí)點(diǎn)不難,都是很簡(jiǎn)單的crud操作,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07springboot項(xiàng)目打成jar包后無法獲取static下的靜態(tài)資源文件的問題分析
這篇文章主要介紹了springboot項(xiàng)目打成jar包后無法獲取static下的靜態(tài)資源文件的問題分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08