测试同事在测试时,需要测试一些比较特殊的场景,需要往第三方的文件中新增数据,而第三方文件内容是以特殊的\u0001做为分隔符的,用普通的文本编辑工具打开是乱码。因此,特写了一个文件操作的小程序给测试同事。
小程序功能:往第三方文件中新增数据,新增的数据是以“|”分隔的。当然,对readDataFromFile方法稍加修改,也可以从文件中读取数据。
FileUtils.java
package com.bijian.tools;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import com.google.common.base.Splitter;
import com.google.common.io.Closeables;
public class FileUtils {
private final static String CHARACTER_ENCODING_UTF_8 = "UTF-8";
private final static String SPLIT_CHAR = "\u0001";
private final static String LOCAL_SPLIT_CHAR = "|";
private final static String FILE_NAME_WITH_PATH = "D:\\data\\files\\test.txt";
public static void main(String[] args) {
List<String> data = new ArrayList<String>();
data.add("123456789|201|301|20170124|153401");
data.add("222222222|202|302|20170124|153501");
List<DataDto> dataList = new ArrayList<DataDto>();
for(String line : data) {
parseLineAndAdd(line, dataList);
}
generateCompareFile(FILE_NAME_WITH_PATH, dataList);
}
/**
* 从文件中读取数据
* @return
*/
private static List<DataDto> readDataFromFile() {
List<DataDto> dataList = new ArrayList<DataDto>();
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(FILE_NAME_WITH_PATH)));
String lineStr;
while ((lineStr = reader.readLine()) != null) {
parseLineAndAdd(lineStr, dataList);
}
}catch(Exception e) {
System.err.println("读取文件出错," + e);
}finally {
try {
if(reader != null) {
Closeables.close(reader, false);
}
} catch (IOException e) {
reader = null;
} finally {
reader = null;
}
}
return dataList;
}
private static void parseLineAndAdd(String line, List<DataDto> dataList) {
List<String> lineData = Splitter.on(LOCAL_SPLIT_CHAR).splitToList(line);
if (CollectionUtils.isNotEmpty(lineData)) {
DataDto data = new DataDto();
data.setId(lineData.get(0));
data.setbCode(lineData.get(1));
data.setcCode(lineData.get(2));
data.setDate(lineData.get(3));
data.setTime(lineData.get(4));
dataList.add(data);
}
}
/**
* 根据指定的文件全路径创建空白文件
*/
public static void createNewFile(String fileName) {
String dir = fileName.substring(0, fileName.lastIndexOf(File.separator));
File dirs = new File(dir);
if (!dirs.exists()) {
dirs.mkdirs();
}
if (!dirs.mkdirs() && !dirs.isDirectory()) {
System.out.println((new StringBuilder("Unable to create directory ")).append(dirs).toString());
}
File file = new File(fileName);
try {
if(file.exists()){
file.delete();
}
file.createNewFile();
} catch (IOException e) {
System.out.println(new StringBuffer("Create File ").append(fileName).append(" happen error,reason:").append(e.toString()).toString());
}
}
private static void generateCompareFile(String fileName, List<DataDto> dataList) {
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, true),
CHARACTER_ENCODING_UTF_8));
System.out.println("文件写入开始");
if (!(CollectionUtils.isEmpty(dataList))) {
for (DataDto temp : dataList) {
writeCoreCompareFileToWriter(bufferedWriter, temp);
}
} else {
System.out.println("无数据写入");
}
System.out.println("文件写入结束");
} catch (Exception e) {
System.err.println("文件写入过程出现异常:" + e);
} finally {
try {
Closeables.close(bufferedWriter, false);
} catch (IOException e) {
System.err.println("关闭IO流失败" + e);
} finally {
bufferedWriter = null;
}
}
}
private static void writeCoreCompareFileToWriter(BufferedWriter bufferedWriter, DataDto data)
throws Exception {
StringBuilder line = new StringBuilder();
line.append(StringUtils.defaultIfEmpty(data.getId(), "")).append(SPLIT_CHAR)
.append(StringUtils.defaultIfEmpty(data.getbCode(), "")).append(SPLIT_CHAR)
.append(StringUtils.defaultIfEmpty(data.getcCode(), "")).append(SPLIT_CHAR)
.append(StringUtils.defaultIfEmpty(data.getDate(), "")).append(SPLIT_CHAR)
.append(StringUtils.defaultIfEmpty(data.getTime(), "")).append(SPLIT_CHAR);
bufferedWriter.write(line.toString());
bufferedWriter.write("\n");
}
}
DataDto.java
package com.bijian.tools;
public class DataDto {
private String id;
private String bCode;
private String cCode;
private String date;
private String time;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getbCode() {
return bCode;
}
public void setbCode(String bCode) {
this.bCode = bCode;
}
public String getcCode() {
return cCode;
}
public void setcCode(String cCode) {
this.cCode = cCode;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}