程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java文件操作之按行讀取文件和遍歷目次的辦法

Java文件操作之按行讀取文件和遍歷目次的辦法

編輯:關於JAVA

Java文件操作之按行讀取文件和遍歷目次的辦法。本站提示廣大學習愛好者:(Java文件操作之按行讀取文件和遍歷目次的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是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]); 
      } 
    } 
  } 
} 

下面遍歷目次是一種遞歸的辦法,我們再來看一下非遞歸的完成:

//非遞歸
  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();//首個目次
      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]);//目次則參加目次列表,症結
          else{
            System.out.println(file[i]);
            num++;
          }
        }
      } else {
        System.out.println(tmp);
        num++;
      }
    }
  }

我們可以寫一個類來簡略測試一下:

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("文件總數:"+num);
    System.out.print("總耗時:");
    System.out.println(System.currentTimeMillis() - a);
  }

測試成果:
遞歸:
文件總數:189497  總耗時:39328
非遞歸:
文件總數:189432 總耗時:37469
這裡非遞歸絕對要好~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved