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
这里非递归相对要好~

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 目录
, 遍历
, 文件
按行读取
java 遍历目录、java 文件目录遍历、java递归遍历目录、java遍历目录下的文件、java遍历ftp目录,以便于您获取更多的相关知识。

时间: 2024-07-31 17:28:18

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

Java获取XML节点总结之读取XML文档节点的方法_java

dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的. 要使用dom4j开发,需要下载导入dom4j相应的jar文件. 官网下载:http://www.dom4j.org/dom4j-1.6.1/ github下载:http://dom4j.github.io/ 下载解压之后如图所示: 我们只需要把dom4j-1.6.1.jar文件构建到我们开发项目中就可以了. 下面就以Eclipse创建java项目的构建方法为例说明: 声明:本Java项目的

Python按行读取文件的实现方法【小文件和大文件读取】_python

本文实例讲述了Python按行读取文件的实现方法.分享给大家供大家参考,具体如下: 小文件: #coding=utf-8 #author: walker #date: 2013-12-30 #function: 按行读取小文件 all_lines = [] try: file = open('txt.txt', 'r') all_lines = file.readlines() except IOError as err: print('File error: ' + str(err)) fin

PHP按行读取文件时删除换行符的3种方法

  这篇文章主要介绍了PHP按行读取文件时删除换行符的3种方法,需要的朋友可以参考下 PHP按行读取文件 去掉换行符"n": 第一种: 代码如下:$content=str_replace("n","",$content); echo $content; 或者: 代码如下:$content=str_replace(array("n","r"),"",$content); 第二种: 代码如下

豆瓣-关于C语言按行读取文件,读取其中数字,挨个转换成doube类型,存入数组

问题描述 关于C语言按行读取文件,读取其中数字,挨个转换成doube类型,存入数组 int main() { FILE *fp; char buffer[50]; char filename[50]; int bufferLen; int i; int j = 0; char c; double c_number[50]; printf("Input file name: "); scanf("%s", filename); if((fp = fopen(filen

实现按行读取文件,把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。

/* 2 编写一个业务函数,实现按行读取文件.把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出. 函数原型有两个,任意选择其一 要求1:请自己任意选择一个接口(函数),并实现功能:70分 要求2:编写测试用例.30分 要求3:自己编写内存释放函数 */ /********************************************************************** * 版权所有 (C)2015, Wu Yingqiang. * * 文件名称:ReadFi

PHP按行读取文件时删除换行符的3种方法_php实例

PHP按行读取文件 去掉换行符"\n": 第一种: 复制代码 代码如下: $content=str_replace("\n","",$content);echo $content; 或者: 复制代码 代码如下: $content=str_replace(array("\n","\r"),"",$content); 第二种: 复制代码 代码如下: $content=preg_replace

php与c 实现按行读取文件实例代码

php与c 实现按行读取文件 前言 感觉很糟糕的一场电话一面竟然给了二面通知,好吧,给自己一个机会也给对方一次机会,题外话.海量数据处理经常涉及到hash将原来文件的每一行散列到子文件中,那如何按行读取文件呢,这里记录一下php和c的实现 很水的一篇,只是记录一下常用的方法,防止面试尴尬 php代码: <?php /** * 按行读取文件 * @param string $filename */ function readFileByLine ($filename) { $fh = fopen(

C++/Php/Python/Shell 程序按行读取文件或者控制台

写程序经常需要用到从文件或者标准输入中按行读取信息,这里汇总一下.方便使用 1. C++  读取文件 1 #include<stdio.h> 2 #include<string.h> 3 4 int main(){ 5 const char* in_file = "input_file_name"; 6 const char* out_file = "output_file_name"; 7 8 FILE *p_in = fopen(in_f

在Linux下和Windows下遍历目录的方法及如何达成一致性操作

最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件夹的使用具有一致性,非常方便.但在C中就不一样了,而且在不同的平台下使用方法也不同.在Linux下实现该功能就非常方便,因为自带有API库,几个函数用起来得心应手(虽然有些小问题,后面说),在Windows下实现就不是那么方便,虽然也有自己的API,但用法有些晦涩难懂,因为没有封装起来,需要自己一步