Java文件操作之按行读取文件和遍历目录的方法
作者:mafuli007 发布时间:2023-11-24 16:58:21
标签: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
这里非递归相对要好~
0
投稿
猜你喜欢
- 本文实例讲述了Android编程开发之TextView单击链接弹出Activity的方法。分享给大家供大家参考,具体如下:话不多说直接上码:
- @ConfigurationProperties加载外部配置@ConfigurationProperties可以将外部配置文件(比如appl
- 本文主要介绍我为桌面和 Web 设计的一个超级秘密 Flutter 项目使用了画布和可拖动节点界面。本教程将展示我如何使用堆栈来使用小部件完
- 本文实例为大家分享了C#超市收银系统设计的具体代码,供大家参考,具体内容如下1.登录界面代码如下:using System;using Sy
- 为什么Android要申请权限简单说下在Android6.0及6.0以上一些google认为涉及“危险和用户隐私”的一些权限不仅要做清单文件
- 一、定义登录控制器目录结构代码:1、创建TUser类package com.demo.pojo;import lombok.AllArgsC
- java数据结构的堆什么是堆堆指的是使用数组保存完全二叉树结构,以层次遍历的方式放入数组中。如图:注意:堆方式适合于完全二叉树,对于非完全二
- 在上一篇文章《驱动开发:内核字符串转换方法》中简单介绍了内核是如何使用字符串以及字符串之间的转换方法,本章将继续探索字符串的拷贝与比较,与应
- 自定义TypeHandler映射JSON类型为List1. 实体类这里只展示需要映射的字段,分别在所需映射的字段和实体类上添加注解。&nbs
- 双向循环链表定义相比于单链表,有两个指针,next指针指向下一个结点,prior指针指向上一个结点,最后一个结点的next指针指向头结点,头
- summarydetail传统的Spring项目会有很多的配置文件,比如我们要使用Redis,一般除了对应的依赖的jar包我们还需要在app
- Bean的自动装配自动装配说明自动装配是使用spring满足bean依赖的一种方法spring会在应用上下文中为某个bean寻找其依赖的be
- Spring JPA 增加字段执行异常用Spring jpa Entity里面增加了几个字段,但启动报错,提示column Unable t
- 前言Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows
- 在阅读这篇文章之前,大家可以先看下《Java多线程atomic包介绍及使用方法》,了解atomic包的相关内容。一、何谓Atomic?Ato
- CSRF介绍CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click atta
- 平常我们工作中基本最多两级嵌套,但是有时候难免会遇到 * 嵌套的业务场景,笔者最近就碰到了,使用一般的嵌套发现赋值为空,这可难倒了菜逼的我,后
- 过年微信红包很火,最近有个项目也要做抢红包,于是写了个红包的生成算法。红包生成算法的需求预先生成所有的红包还是一个请求随机生成一个红包简单来
- HashMap的keySet()方法比较简单,作用是获取HashMap中的key的集合。虽然这个方法十分简单,似乎没有什么可供分析的,但真正
- 一、什么是状态管理大到整个app的状态,用户使用app是登录状态,还是游客状态;小到一个按钮的状态,按钮是点击选中状态还是未点击状态等等,这