java循环文件夹读取各种文件

这篇博客介绍了如何使用Java进行文件夹遍历,详细讲解了读取不同文件格式的方法,包括步骤和关键代码片段。

文件格式是这样的

处理方法为:

package com.caissa.chador_mr;

import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * Created by admin on 2019/1/25.
 */
public class ReadLogFile {

	public static void main(String [] args){
      traverseFolder2("C:\\Users\\admin\\Desktop\\新报表系统\\新日报数据");
	}

	/**
	 * 遍历文件夹
	 * @param path
	 */
	public static  void traverseFolder2(String path){
		File file = new File(path);
		if (file.exists()) {
			File[] files = file.listFiles();
			if (files.length == 0) {
				System.out.println("文件夹是空的!");
				return;
			} else {
				for (File file2 : files) {
					if (file2.isDirectory()) {
						System.out.println("文件夹:" + file2.getAbsolutePath());
						traverseFolder2(file2.getAbsolutePath());
					} else {
						String fileName=file2.getName();
						String fileType=fileName.substring(fileName.lastIndexOf(".")+1);
						System.out.println("文件名:" +fileName+"文件后缀:"+ fileName.substring(fileName.lastIndexOf(".")+1));
						if(fileType.equals("csv")){
							readCsvFile(file2.getAbsolutePath());
						}else if(fileType.equals("bz2")){
							readBZ2File(file2.getAbsolutePath());
						}else if(fileType.equals("txt")){
                            readTxtFile(file2.getAbsolutePath());
						}

					}
				}
			}
		} else {
			System.out.println("文件不存在!");
		}
	}

	/**
	 * 读取bz2文件的内容
	 * @param fileAdress
	 */
	public static void  readBZ2File(String fileAdress){
		DealLineDate dealLineDate =new DealLineDate();
		File file=new File(fileAdress);
		InputStream is=null;
		try {
			//用bz2读取文件
			is=new BZip2CompressorInputStream(new FileInputStream(file));
			BufferedReader reader = new BufferedReader(new InputStreamReader(is));
			String line = null;
			while ((line = reader.readLine()) != null) {
				//读取之后的处理
				System.out.println(line);
				dealLineDate.dealDate(line);
			}
			reader.close();
			is.close();
		}catch (Exception e){
			e.printStackTrace();
		}
	}
	/**
	 * 读取txt文件的内容
	 * @param fileAdress
	 */
	public static void readTxtFile(String fileAdress){
		DealLineDate dealLineDate =new DealLineDate();
		try {
			File filename = new File(fileAdress); // 要读取以上路径的input。txt文件
			InputStreamReader reader = new InputStreamReader(new FileInputStream(filename)); // 建立一个输入流对象reader
			BufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
			String line = "";
			line = br.readLine();
			while (line != null) {
				line = br.readLine(); // 一次读入一行数据
				System.out.println(line);
				dealLineDate.dealDate(line);
			}
		}catch (Exception e){
			e.printStackTrace();
		}
	}
	/**
	 * 读取txt文件的内容
	 * @param fileAdress
	 */
	public static void readCsvFile(String fileAdress){
		DealLineDate dealLineDate =new DealLineDate();
		try{
			BufferedReader reader = new BufferedReader(new FileReader(fileAdress));
			reader.readLine();//第一行信息,为标题信息,不用,如果需要,注释掉
			String line = null;
			while((line=reader.readLine())!=null){
				System.out.println(line);
				dealLineDate.dealDate(line);
			}
		}catch (Exception e){
			e.printStackTrace();
		}
	}
}


 

### 如何使用Java循环读取文件夹中的文件Java中,可以利用`File`类来操作文件和目录。通过创建一个表示指定路径名的对象并调用其方法,能够轻松遍历文件夹及其子项。下面是一个完整的例子,展示如何使用Java循环读取文件夹下的所有文件。 #### 示例代码 以下是实现该功能的一个简单示例: ```java import java.io.File; public class FolderReader { public static void main(String[] args) { File folder = new File("path/to/your/folder"); // 替换为目标文件夹路径 if (folder.exists() && folder.isDirectory()) { // 检查目标是否为有效目录 listFilesInFolder(folder); } else { System.out.println("The specified path is not a valid directory."); } } private static void listFilesInFolder(File folder) { File[] filesList = folder.listFiles(); if (filesList != null) { // 防止空指针异常 for (File file : filesList) { if (file.isFile()) { System.out.println("File: " + file.getAbsolutePath()); // 输出文件绝对路径 } else if (file.isDirectory()) { System.out.println("Directory: " + file.getAbsolutePath()); // 如果是子目录,则递归访问 listFilesInFolder(file); } } } } } ``` 上述代码实现了以下功能: 1. 创建了一个代表目标文件夹的`File`对象。 2. 使用件语句验证此对象是否存在以及它是否确实指向一个目录。 3. 调用了自定义函数`listFilesInFolder()`,用于递归地列出当前文件夹内的所有文件和子文件夹的内容[^4]。 注意:如果要处理非常深或者特别大的文件结构时,可能需要考虑性能优化问题,比如设置最大递归层数限制等措施。 #### 关于注释与反编译 当编写此类程序时,请记住源码里的注解不会影响最终生成的应用逻辑。因为一旦`.java`文件被编译成`.class`之后,所有的注释都会消失[^2]。因此,在实际开发过程中合理添加必要的说明性文字有助于提高可维护性和理解度。 #### 解决JD-GUI启动错误提示 对于提到的JD-GUI工具无法正常运行的情况,是因为缺少满足最低版本需求(即JDK 1.8+) 的JAVA环境所致[^3]。解决办法如下所示: - 确认本地已安装符合要求的JDK; - 设置好系统的PATH变量以便命令行能识别到正确的javac/java指令位置; - 或者尝试下载最新版支持更高级别的jdk版本号的新版本软件包重新部署测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值