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:[email protected]
 * @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;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章