按行读取文件
tes paket; impor java.io.*; impor java.util.*; Public Class ReadTest {Public Static List <String> first_list; Daftar Statis Publik <String> Second_list; readTest publik () {first_list = new LinkedList <> (); Second_list = new LinkedList <> (); } public static void readFile () {final string fileName = "d: //aa.txt"; String str = null; int i = 0; coba {linenumberreader pembaca = null; pembaca = LinenumberReader baru (filereader baru (nama file)); while ((str = reader.readline ())! = null) {if (! str.isempty ()) {string values [] = str.split (""); first_list.add (nilai [0]); Second_list.add (nilai [1]); }}} catch (ioException e) {E.PrintStackTrace (); }} public static void main (string args []) {readTest reader = baru readTest (); reader.readfile (); untuk (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 = file baru (dir); File [] file = file.listFiles (); if (null == file) {return; } untuk (int i = 0; i <file.length; i ++) {if (file [i] .isDirectory ()) {listFiles (file [i] .getAbsolutePath ()); } else {System.out.println (file [i]); filelist.add (file [i]); }}}}上面遍历目录是一种递归的方法 , : :
// 非递归 public static void skandirnorecursion (string path) {linkedList list = new LinkedList (); File dir = file baru (path); File file [] = dir.listfiles (); untuk (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 (); // 首个目录 if (tmp.isdirectory ()) {file = tmp.listFiles (); if (file == null) lanjutkan; untuk (int i = 0; i <file.length; i ++) {if (file [i] .isdirectory ()) list.add (file [i]); // 目录则加入目录列表 , 关键 else {System.out.println (file [i]); num ++; }}} else {System.out.println (tmp); num ++; }}}我们可以写一个类来简单测试一下 :
impor java.io.file; import java.util.linkedlist; sistem public class {public static int num; public static void main (string [] args) {long a = system.currentTimeMillis (); // string path = "c:"; num = 0; String [] daftar = {"c:", "d:"}; /* untuk (int i = 0; i <lists.length; i ++) {file file = file baru (daftar [i]); skandirrecursion (file); */ for (int i = 0; i <lists.length; i ++) {skandirnorecursion (daftar [i]); } System.out.print ("文件总数:"+num); System.out.print ("总耗时:"); System.out.println (System.CurrentTimeMillis () - a); }测试结果 :
递归 :
文件总数: 189497 总耗时: 39328
非递归 :
文件总数: 189432 总耗时: 37469
这里非递归相对要好 ~