Java如何读取数据文件,如txt文件或者.dat文件 中的内容

在实际工作中, 我们需要读取一些报表之类的数据文件, 这些文件一般可以是.dat .txt 格式的 , 那么如何读取呢?

下面案例以 .txt 为例. 

package wxy.IO;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;


/**
 * @author wxy e-mail:wxypersonal@163.com
 * @date 创建时间:2017年5月22日 下午3:59:26
 * @version 1.0
 * @company: xxx科技公司
 * @description: InputStreamReader 是字节流向字符流转换的桥梁\ 这个类是按照格式pattern解析
 *               txt格式文件中的数据. ps: 其实读取其他数据格式文件也是类似的, 比如要读取.dat文件.
 * */
public class ReadTXT {
	/**
	 * 在这里进行测-
	 * @param args
	 */
	public static void main(String[] args) {
			File file = new File(
					"E:/wxy-workspace/space01/wxy/resources/222.txt"); 
			//注意: 这里的file路径自己可以为了测试, 随便变化的, 写一个测试文件全路径即可 
			List<List<Object>> arr = parseTxt(file, "\\.");
			System.out.println(arr);
	}
	
	
	/**
	 * 注意, 此类进行解析, 是按照gbk默认编码进行解析, 因为InputStreamReader的转换编码就是GBK
	 * @param file
	 *            为解析文件的路径
	 * @param pattern
	 *            解析格式 注意pattern的输入,是否是转义字符来解析的, 如果是, 注意正确的输入,因为split()方法支持正则表达式
	 * @return
	 */
	public static List<List<Object>> parseTxt(File file, String pattern) {
		String fileName = file.getName(); // testFile.txt
		if (! StringUtils.isNotEmpty(fileName)) {
			System.out.println("输入参数file错误, 必须精确到文件名.txt后缀全路径才行");
			return null;
		}
		// System.out.println(fileName);
		// 获取后缀名 如果后缀名没有 .   则返回""
		String houZhui = fileName.lastIndexOf(".") == -1 ? "" : fileName
				.substring(fileName.lastIndexOf(".") + 1) ;
		
		List<List<Object>> listRows = null;//用于返回使用
		if ("txt".equals(houZhui)) {
			BufferedReader bf = null;
			String temp = null;
			try {
				//注意:inputStreamReader是一个字节流向字符流转换的桥梁
//				bf = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
				FileInputStream fis = new FileInputStream(new File(file, ""));
				
				/** 注意: 我这里吧GBK编码格式写死了, 具体工作中, 需要看txt文件的编码格式, 如果是windows系统默认, 那就是
				 * GBK, 如果是其他的, 那可以改成utf-8,
				 *  */
				bf = new BufferedReader(new InputStreamReader(fis, "GBK"));//从这一句可以看出, 这里可以指定
																			//InputStreamReader的编码格式.
				listRows = new ArrayList<List<Object>>();//用于返回使用
				while ((temp = bf.readLine()) != null) {
					if (temp.replaceAll(" ", "").length() > 0) {
						String[] arr = temp.split(pattern);
						List<Object> row = new ArrayList<Object>();
						for (String string : arr) {//循环遍历上面的数组
							row.add(string);
						}
						listRows.add(row);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
				System.out.println("txt文件读取失败");
			}finally{
				//在返回之前关闭流
				if (bf != null) {
					try {
						bf.close();
					} catch (IOException e2) {
						//添加日志文件吧
					}
				}
			}
		}else{
			System.out.println("发生异常: 文件的后缀名不是以.txt结尾的");
			return null;
		}
		return listRows;
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值