首页 > 技术文章 > 读取固定格式txt文件,利用fastjson把内容转换成json数据

huangtao1927 2018-04-02 02:47 原文

从本地读取txt文件,内容样式如下:

1,2;
wrewr,23423;
李磊,null;
HC14323,兰兰;
HC14323,2018-03-13 13:25:33.233;

目的:转换成json数据

===============================================

/**
* @Title: FileReadUtil.java
* @Package com.clientservice.utils
* @Description: TODO(用一句话描述该文件做什么)
* @author huangtao
* @date 2018年4月2日 上午1:43:29
* @version V1.0
*/
package com.clientservice.utils;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;

/**
* @ClassName: FileReadUtil
* @Description: 读取固定格式的txt文件
* @author huangtao
* @date 2018年4月2日 上午1:43:29
*
*/
public class FileReadUtil {

private static final String DEBUG_PREFIX = "[FileReadUtil]";

// private static final String INFO_PREFIX = "<FileReadUtil>";

private static final String ERROR_PREFIX = "FileReadUtil->";

private static Logger logger = LoggerFactory.getLogger(FileReadUtil.class);

public static <T>String readFile(String filePath,Class<T> cls){
logger.debug(DEBUG_PREFIX+"readFile begin");

//将读取数据依次放到List中
List<String> list = new ArrayList<String>();
//存放最终的数据
List<T> tList = new ArrayList<T>();
//最终结果转换成json
String json = null;

File f = new File(filePath);
BufferedReader br = null;
InputStreamReader isr = null;

try {
// 创建一个文件读取流对象,和指定文件名的文件相关联
isr = new InputStreamReader(new FileInputStream(f),"gbk");
br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
//一行一行读取内容,把内容存放到list中
list.add(line);
}

// 使用foreach遍历List,分割list中的每一个元素
for (String str : list) {
//去除最后的;
String value = str.substring(0, str.length()-1) ;
//以逗号分隔
String[] arrStr = value.split(",");
//返回对象
T p = returnObject(arrStr,cls);
tList.add(p);
}
json = JSON.toJSONString(tList);

} catch (Exception e) {
logger.error(ERROR_PREFIX+"execute readFile occur error,the exception is:"+e);
} finally{
// 关闭资源
if (isr != null) {
try {
isr.close();
} catch (IOException e) {
logger.error(ERROR_PREFIX+"execute readFile occur error,release resource error,the exception is:"+e);
}
}
// 关闭资源
if (br != null) {
try {
br.close();
} catch (IOException e) {
logger.error(ERROR_PREFIX+"execute readFile occur error,release resource error,the exception is:"+e);
}
}
}
logger.debug(DEBUG_PREFIX+"readFile end");
return json;
}

private static <T> T returnObject(String[] arrStr,Class<T> cls){
logger.debug(DEBUG_PREFIX+"returnObject begin");
try {
//创建任意对象
T object = cls.newInstance();

// 获取实体类的所有属性,返回Field数组
Field[] field = cls.getDeclaredFields();
// 获取属性的名字
String[] modelName = new String[field.length];
String[] modelType = new String[field.length];

for (int i = 0; i < field.length; i++){

// 获取属性的名字
String name = field[i].getName();
modelName[i] = name;
// 获取属性类型
String type = field[i].getGenericType().toString();
modelType[i] = type;

//关键。。。可访问私有变量
field[i].setAccessible(true);
//给属性设置
field[i].set(object, field[i].getType().getConstructor(field[i].getType()).newInstance(arrStr[i]));

}

logger.debug(DEBUG_PREFIX+"returnObject end");

return object;
} catch (Exception e) {
logger.error(ERROR_PREFIX+"execute returnObject occur error,the exception is:"+e);
}
return null;
}
}

推荐阅读