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

作者:mafuli007 时间:2023-11-24 16:58:21 

按行读取文件


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,文件,目录
0
投稿

猜你喜欢

  • SpringBoot 创建web项目并部署到外部Tomcat

    2023-09-15 18:25:04
  • 关于C++虚继承的内存模型问题

    2023-04-01 06:10:21
  • Android 如何实现动态申请权限

    2023-07-30 00:51:31
  • 千万不要被阶乘吓倒

    2021-10-06 22:35:45
  • Android使用元数据实现配置信息的传递方法详细介绍

    2023-11-02 15:25:48
  • Java基础之位运算知识总结

    2022-09-10 17:48:43
  • Springboot使用test无法启动问题的解决

    2021-07-03 22:09:23
  • Android Studio打包.so库到apk中实例详解

    2022-06-25 19:19:25
  • 深入Android MediaPlayer的使用方法详解

    2023-07-21 21:50:47
  • 解决mybatis-plus自动配置的mapper.xml与java接口映射问题

    2023-08-25 04:16:02
  • Android开发升级AGP7.0后的一些适配方法技巧

    2022-10-22 17:41:22
  • c#在程序中定义和使用自定义事件方法总结

    2022-07-12 01:45:30
  • Android开发之完成登陆界面的数据保存回显操作实例

    2022-07-05 19:13:40
  • 基于Java实现缓存Cache的深入分析

    2023-08-15 20:53:59
  • Android封装实现短信验证码的获取倒计时

    2023-06-28 22:57:23
  • Android Apt之Activity Route的示例

    2022-03-31 17:05:18
  • Springboot 通过FastJson实现bean对象和Json字符串互转问题

    2021-11-14 05:10:06
  • Spring的组合注解和元注解原理与用法详解

    2023-12-05 10:25:05
  • Java实现小型图书馆管理系统

    2021-06-14 04:27:35
  • java String的intern方法

    2021-07-05 03:23:52
  • asp之家 软件编程 m.aspxhome.com