Java文件操作之按行读取文件和遍历目录的方法

 更新时间:2016年03月10日 08:56:57   作者:mafuli007  
这篇文章主要介绍了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
这里非递归相对要好~

相关文章

  • 解决出现 java.lang.ExceptionInInitializerError错误问题

    解决出现 java.lang.ExceptionInInitializerError错误问题

    这篇文章主要介绍了解决出现 java.lang.ExceptionInInitializerError错误问题的相关资料,需要的朋友可以参考下
    2017-01-01
  • 实例详解java Struts2的配置与简单案例

    实例详解java Struts2的配置与简单案例

    这篇文章主要介绍了java Struts2的配置与简单案例,需要的朋友可以参考下
    2017-04-04
  • 解决springcloud 配置gateway 出现错误的问题

    解决springcloud 配置gateway 出现错误的问题

    今天给大家分享springcloud 配置gateway 出现错误的问题,其实解决方法很简单,只需要降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不报错了,下面给大家展示下,感兴趣的朋友一起看看吧
    2021-11-11
  • Java实现手写线程池的示例代码

    Java实现手写线程池的示例代码

    在我们的日常的编程当中,并发是始终离不开的主题,而在并发多线程当中,线程池又是一个不可规避的问题。本文就来分享一下如何自己手写一个线程池,需要的可以参考一下
    2022-08-08
  • SpringBoot中Mockito单元测试入门

    SpringBoot中Mockito单元测试入门

    单元测试在很多地方都用的到,本文主要介绍了SpringBoot中Mockito单元测试入门,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • 使用SpringBoot开发Restful服务实现增删改查功能

    使用SpringBoot开发Restful服务实现增删改查功能

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了基于SpringBoot开发一个Restful服务,实现增删改查功能,需要的朋友可以参考下
    2018-01-01
  • Java中try catch处理异常示例

    Java中try catch处理异常示例

    这篇文章主要给大家介绍了关于Java中try catch 的基本用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • swagger2隐藏在API文档显示某些参数的操作

    swagger2隐藏在API文档显示某些参数的操作

    这篇文章主要介绍了swagger2隐藏在API文档显示某些参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java中简单实用Quartz概述

    Java中简单实用Quartz概述

    Quartz是一个开源的Java调度框架,可以用来实现在指定的时间或时间间隔触发任务执行的功能,这篇文章主要介绍了Java中简单实用Quartz,需要的朋友可以参考下
    2023-02-02
  • Jmeter中的timeshift()函数获取当前时间进行加减

    Jmeter中的timeshift()函数获取当前时间进行加减

    这篇文章主要介绍了Jmeter中的timeshift()函数获取当前时间进行加减,TimeShift(格式,日期,移位,语言环境,变量)可对日期进行移位加减操作,本文给大家详细讲解,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10

最新评论