按行读取文件
การทดสอบแพ็คเกจ; นำเข้า Java.io.*; นำเข้า Java.util.*; Public Class Readtest {รายการคงที่สาธารณะ <String> first_list; รายการคงที่สาธารณะ <String> second_list; public readtest () {first_list = new linkedList <> (); second_list = ใหม่ linkedList <> (); } โมฆะคงที่สาธารณะ readfile () {filename สตริงสุดท้าย = "d: //aa.txt"; string str = null; int i = 0; ลอง {linenumberReader reader = null; reader = ใหม่ linenumberReader (filereader ใหม่ (ชื่อไฟล์)); ในขณะที่ ((str = reader.readline ())! = null) {ถ้า (! str.isempty ()) {ค่าสตริง [] = str.split (""); first_list.add (ค่า [0]); second_list.add (ค่า [1]); }}} catch (ioexception e) {e.printstacktrace (); }} โมฆะคงที่สาธารณะหลัก (สตริง args []) {readtest reader = new readTest (); reader.readfile (); สำหรับ (int i = 0; i <first_list.size (); i ++) {system.out.println (first_list.get (i) + ":" + second_list.get (i)); -递归遍历目录
คลาส listfiles {public arraylist public arraylist filelist = new ArrayList (); void listfiles สาธารณะคงที่ (สตริง dir) {ไฟล์ไฟล์ = ไฟล์ใหม่ (dir); ไฟล์ [] files = file.listfiles (); if (null == ไฟล์) {return; } สำหรับ (int i = 0; i <files.length; i ++) {ถ้า (ไฟล์ [i] .isdirectory ()) {listfiles (ไฟล์ [i] .getAbsolutepath ()); } else {system.out.println (ไฟล์ [i]); fileList.add (ไฟล์ [i]); -上面遍历目录是一种递归的方法, 我们再来看一下非递归的实现:
// 非递归โมฆะสาธารณะคงที่ scandirnorecursion (เส้นทางสตริง) {LinkedList list = new LinkedList (); ไฟล์ dir = ไฟล์ใหม่ (พา ธ ); ไฟล์ไฟล์ [] = dir.listfiles (); สำหรับ (int i = 0; i <file.length; i ++) {ถ้า (ไฟล์ [i] .isdirectory ()) list.add (ไฟล์ [i]); else {system.out.println (ไฟล์ [i] .getAbsolutepath ()); num ++; }} ไฟล์ tmp; ในขณะที่ (! list.isempty ()) {tmp = (ไฟล์) list.removefirst (); // 首个目录ถ้า (tmp.isdirectory ()) {file = tmp.listfiles (); ถ้า (ไฟล์ == null) ดำเนินการต่อ; สำหรับ (int i = 0; i <file.length; i ++) {ถ้า (ไฟล์ [i] .isdirectory ()) list.add (ไฟล์ [i]); // 目录则加入目录列表, 关键 lels {system.out.println (ไฟล์ [i]); num ++; }}} else {system.out.println (tmp); num ++; -我们可以写一个类来简单测试一下:
นำเข้า java.io.file; นำเข้า java.util.linkedList; ระบบไฟล์ระดับสาธารณะ {สาธารณะคงที่ int num; โมฆะคงที่สาธารณะหลัก (String [] args) {long a = system.currentTimeMillis (); // path String = "C:"; num = 0; สตริง [] list = {"c:", "d:"}; /* สำหรับ (int i = 0; i <lists.length; i ++) {ไฟล์ไฟล์ = ไฟล์ใหม่ (รายการ [i]); Scandirrecursion (ไฟล์); */ สำหรับ (int i = 0; i <lists.length; i ++) {scandirnorecursion (รายการ [i]); } system.out.print ("文件总数:"+num); System.out.print ("总耗时:"); System.out.println (System.currentTimeMillis () - A); -测试结果:
递归:
文件总数: 189497 总耗时: 39328
非递归:
文件总数: 189432 总耗时: 37469
这里非递归相对要好 ~