Java文件操作之按行读取文件和遍历目录的方法
时间:2021-06-26 08:46:22|栏目: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
这里非递归相对要好~
上一篇:JVM运行时数据区原理解析
栏 目:JAVA代码
下一篇:Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的完美解决方法
本文地址:http://www.codeinn.net/misctech/148275.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




