package org.example.test_filebasestudy;
import java.io.*;
public class TryTraverseDemo03 {
public static void main(String args[]) {
// 以文件路径为C:\Users\zhang\Javatest,指定文件对象file
File files = new File("C:\\Users\\zhang\\Javatest" );
// 调用方法,进行文件的遍历和读取,参数为文件对象 file
fileTraverse(files);
}
// 进行文件的遍历和读取的方法,参数为文件对象 file
public static void fileTraverse(File files) {
// 创建文件数组
File[] arrFile = files.listFiles();
// 遍历文件数组(增强for循环)
for (File file : arrFile) {
// 进行判断,判断遍历出的文件是否为文件目录
if (file.isDirectory()) {
// 打印出文件的绝对路径
System.out.println(file.getAbsolutePath());
// 调用文件遍历的方法,再次遍历此文件目录下的文件
fileTraverse(file);
} else {
/*判断为文件后,进行文件类型的判断(判断出自己所需的文件)*/
// String 类型 变量,用于存放文件的后缀
String suffix = "";
// 获取文件名,类型为String
String fileName = file.getName();
// 用于存放最后一次出现 . 位置索引的变量
int index = fileName.lastIndexOf("." );
// 得到文件后缀名,index存放的是“.”的位置,往后+1 得到的就是文件后缀名
suffix = fileName.substring(index + 1);
// 获取文件的绝对路径,用于后面文件内容的读取
File fileRoad = file.getAbsoluteFile();
//进行判断是否为自己需要的文件
if (suffix.equalsIgnoreCase("txt" )) {
/* 判断是txt 文件后,进行读取和写入操作*/
try {
// 创建文件字节输入流,通过文件的路径
//InputStream in = new FileInputStream(fileRoad);
// 一次读一个字节,临时存放读取的内容,并协助判断是否已经读到文件末尾
InputStream in = null;
/*FileInputStream:文件字节输入流*/
// 将 fileRoad 赋值给 字节流的输入对象
in = new FileInputStream(fileRoad);
int readOne = 0;
//判断是否读到文件末尾,若readOne = in.read()) = -1 表示已经读到文件最后了
while ((readOne = in.read()) != -1) {
System.out.print(readOne);
}
in.close();
System.out.println(fileRoad);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
相关知识
1、File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
2、listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
3、isDirectory() 测试此抽象路径名表示的文件是否是一个目录。返回一个Boolean值
4、lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。
5、substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
6、InputStream:字节输入流
1)字节输入流的使用步骤(重点)
*1.创建FileInputStream对象,构造方法中绑定要读取的数据源
*2.使用FileInputStream对象中的方法read,读取文件
*3.释放资源
2) FileInputStream 从文件系统中的某个文件中获得输入字节。
* FileInputStream(File file)
* 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。