Java文件操作之按行讀取文件和遍歷目錄的方法
按行讀取文件
package test; import java.io.*; import java.util.*; public class ReadTest { public static List<String> first_list; public static List<String> second_list; public ReadTest() { first_list = new LinkedList<>(); second_list = new LinkedList<>(); } public static void ReadFile() { final String filename = "d://aa.txt"; String str = null; int i = 0; try { LineNumberReader reader = null; reader = new LineNumberReader(new FileReader(filename)); while ((str = reader.readLine()) != null) { if (!str.isEmpty()) { String values[] = str.split(" "); first_list.add(values[0]); second_list.add(values[1]); } } } catch (IOException e) { e.printStackTrace(); } } public static void main(String args[]) { ReadTest reader = new ReadTest(); reader.ReadFile(); for (int i = 0; i < first_list.size(); i++) { System.out.println(first_list.get(i) + ":" + second_list.get(i)); } } }
遞歸遍歷目錄
class ListFiles{ public static ArrayList filelist = new ArrayList(); public static void listfiles(String dir){ File file = new File(dir); File[] files = file.listFiles(); if(null == files){ return; } for(int i = 0; i < files.length; i++){ if(files[i].isDirectory()) { listfiles(files[i].getAbsolutePath()); } else{ System.out.println(files[i]); filelist.add(files[i]); } } } }
上面遍歷目錄是一種遞歸的方法,我們?cè)賮砜匆幌路沁f歸的實(shí)現(xiàn):
//非遞歸 public static void scanDirNoRecursion(String path){ LinkedList list = new LinkedList(); File dir = new File(path); File file[] = dir.listFiles(); for (int i = 0; i < file.length; i++) { if (file[i].isDirectory()) list.add(file[i]); else{ System.out.println(file[i].getAbsolutePath()); num++; } } File tmp; while (!list.isEmpty()) { tmp = (File)list.removeFirst();//首個(gè)目錄 if (tmp.isDirectory()) { file = tmp.listFiles(); if (file == null) continue; for (int i = 0; i < file.length; i++) { if (file[i].isDirectory()) list.add(file[i]);//目錄則加入目錄列表,關(guān)鍵 else{ System.out.println(file[i]); num++; } } } else { System.out.println(tmp); num++; } } }
我們可以寫一個(gè)類來簡(jiǎn)單測(cè)試一下:
import java.io.File; import java.util.LinkedList; public class FileSystem { public static int num; public static void main(String[] args) { long a = System.currentTimeMillis(); //String path="c:"; num=0; String[] lists={"c:","d:"}; /* for(int i=0;i<lists.length;i++){ File file=new File(lists[i]); scanDirRecursion(file); */ for(int i=0;i<lists.length;i++){ scanDirNoRecursion(lists[i]); } System.out.print("文件總數(shù):"+num); System.out.print("總耗時(shí):"); System.out.println(System.currentTimeMillis() - a); }
測(cè)試結(jié)果:
遞歸:
文件總數(shù):189497 總耗時(shí):39328
非遞歸:
文件總數(shù):189432 總耗時(shí):37469
這里非遞歸相對(duì)要好~
相關(guān)文章
WebUploader實(shí)現(xiàn)圖片上傳功能
這篇文章主要為大家詳細(xì)介紹了WebUploader實(shí)現(xiàn)圖片上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03關(guān)于Java Interface接口的簡(jiǎn)單練習(xí)題
這篇文章主要給大家分享的是關(guān)于Java Interface接口的簡(jiǎn)單練習(xí)題,難度不算大,但是要有一個(gè)清晰的邏輯建立接口和鏈接Java類。下面來看看文章的詳細(xì)介紹吧,需要的朋友可以參考一下2021-11-11Spring的FactoryBean<Object>接口示例代碼
FactoryBean是Spring框架中的一個(gè)接口,用于創(chuàng)建和管理Bean對(duì)象,它的作用是將Bean的創(chuàng)建過程交給FactoryBean實(shí)現(xiàn)類來完成,而不是直接由Spring容器來創(chuàng)建,本文給大家介紹Spring的FactoryBean<Object>接口,感興趣的朋友一起看看吧2023-11-11spring boot整合netty的實(shí)現(xiàn)方法
這篇文章主要介紹了spring boot整合netty的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08SpringBoot MainApplication類文件的位置詳解
這篇文章主要介紹了SpringBoot MainApplication類文件的位置詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot實(shí)現(xiàn)掃碼登錄的項(xiàng)目實(shí)踐
本文主要介紹了SpringBoot實(shí)現(xiàn)掃碼登錄的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Jdbctemplate多數(shù)據(jù)源配置方法詳解
這篇文章主要介紹了Jdbctemplate多數(shù)據(jù)源配置方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06