package com.fy.service.impl;
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.Iterator; import java.util.List;
import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Iterables;
public class Test3 { public static void main(String[] args) throws Exception { File f = new File(“D:new.txt”); String sourceStr = readtxtContent(f); if ("".equals(sourceStr) || sourceStr == null) { System.out.print(“文件为空”); return; } List listData = getListData(sourceStr); boolean Flag=createCsvFile(listData,“D:CSVDir”,“csvFile”); if (Flag == true) { System.out.print(“CSV文件创建成功!”); }else { System.out.print(“CSV文件创建失败!”); }
}
public static String readtxtContent(File file) {
StringBuilder result = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
String s = null;
while ((s = br.readLine()) != null) {// 使用readLine方法,一次读一行
result.append(System.lineSeparator() + s);
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
public static List getListData(String sourceStr) {
// 用于返回的集合
List list = new ArrayList<>();
// 去除字符串的双引号
String trimStr = sourceStr.replace(""", "");
// 截取头部信息
// String subStr = trimStr.substring(49);
// 下面是数据处理
String delimiter = ",";
int partitionSize = 9;
for (Iterable iterable : Iterables.partition(Splitter.on(delimiter).split(trimStr), partitionSize)) {
String join = Joiner.on(delimiter).join(iterable);
if ("".equals(join) || join == null) {
return list;
}
Object[] split = join.split(",");
if (split.length == 8) {
split = Arrays.copyOf(split, split.length + 1);
split[8] = "";
}
list.add(split);
}
return list;
}
public static boolean createCsvFile(List rows, String filePath, String fileName) {
// 标记文件生成是否成功;
boolean flag = true;
// 文件输出流
BufferedWriter fileOutputStream = null;
try {
// 含文件名的全路径
String fullPath = filePath + File.separator + fileName + ".csv";
File file = new File(fullPath);
if (!file.getParentFile().exists()) // 如果父目录不存在,创建父目录
{
file.getParentFile().mkdirs();
}
if (file.exists()) // 如果该文件已经存在,删除旧文件
{
file.delete();
}
file = new File(fullPath);
file.createNewFile();
// 格式化浮点数据
NumberFormat formatter = NumberFormat.getNumberInstance();
formatter.setMaximumFractionDigits(10); // 设置最大小数位为10;
// 格式化日期数据
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
// 实例化文件输出流
fileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "GB2312"), 1024);
// 遍历输出每行
Iterator ite = rows.iterator();
while (ite.hasNext()) {
Object[] rowData = (Object[]) ite.next();
for (int i = 0; i < rowData.length; i++) {
Object obj = rowData[i]; // 当前字段
obj = obj+"t";
// 格式化数据
String field = "";
if (null != obj) {
if (obj.getClass() == String.class) // 如果是字符串
{
field = (String) obj;
} else if (obj.getClass() == Double.class || obj.getClass() == Float.class) // 如果是浮点型
{
field = formatter.format(obj); // 格式化浮点数,使浮点数不以科学计数法输出
} else if (obj.getClass() == Integer.class
|| obj.getClass() == Long.class | obj.getClass() == Short.class
|| obj.getClass() == Byte.class) {
// 如果是整型
field += obj;
} else if (obj.getClass() == Date.class) // 如果是日期类型
{
field = sdf.format(obj);
} else {
field = " "; // null时给一个空格占位
}
// 拼接所有字段为一行数据
if (i < rowData.length - 1) // 不是最后一个元素
{
// System.out.print("""+field+"""+",");
fileOutputStream.write(""" + field + """ + ",");
} else {
// 最后一个元素
fileOutputStream.write(""" + field + """);
}
}
// 创建一个新行
if (ite.hasNext()) {
// fileOutputStream.newline();
}
}
fileOutputStream.newline(); // 换行,创建一个新行;
}
fileOutputStream.flush();
} catch (Exception e) {
flag = false;
e.printStackTrace();
} finally {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return flag;
}
}