龙空技术网

JAVA批量转换文件编码格式,针对csv和txt编码格式

和国学猫一起学国学 163

前言:

目前大家对“java导出大批量数据为txt”大体比较珍视,小伙伴们都需要剖析一些“java导出大批量数据为txt”的相关文章。那么小编同时在网络上汇集了一些有关“java导出大批量数据为txt””的相关内容,希望小伙伴们能喜欢,各位老铁们一起来了解一下吧!

由于第三方给出的csv编码格式问题导致无法导入指定的库表,网上找了许多转换的插件总是不满意。折腾了大半天想想还是自己改造下吧。该工具包解决了几乎所有的编码问题,若是不足之处请指出。由于文件暂存在String类型里面,要是文件太大的话会报内存溢出的错误可以自行调整下代码。

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FilenameFilter;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.nio.charset.Charset;import java.nio.charset.UnsupportedCharsetException;public class FileCharsetConverter {  public static void main(String[] args) throws Exception {  String dirPath ="C:\\Users\\oftoo\\Desktop\\服务默认\\原编码\\xx\\xx"; File dirFile = new File(dirPath); File[] files = dirFile.listFiles(); if (null == files) { System.out.println("路径:" + dirPath + ",该文件夹下没有文件"); } else { for (int i = 0; i < files.length; i++) { File file = files[i]; String destFileName = file.getCanonicalPath(); File destFile = new File(destFileName); if (destFile.exists()) { convert(destFile.getCanonicalPath(),  "UTF-16LE", "GBK", new FilenameFilter() {  @Override  public boolean accept(File dir, String name) {  return name.endsWith("csv");  }  });  } else { System.out.println("路径:" + dirPath + ",该文件夹下没有文件"); } } System.out.println("编码转换结束"); } /*convert("C:\\Users\\xieyh\\Desktop\\测试编码\\LRL_HairStore_Tmall_Acxiom_Transaction_20170619.csv",  "UTF-16LE", "GBK", new FilenameFilter() {  @Override  public boolean accept(File dir, String name) {  return name.endsWith("csv");  }  }); */ }  public static String getParentPath(File file) { if (null != file && file.exists()) { return file.getParent(); } return ""; } /**  * 把指定文件或目录转换成指定的编码  *  * @param fileName  * 要转换的文件  * @param fromCharsetName  * 源文件的编码  * @param toCharsetName  * 要转换的编码  * @throws Exception  */  public static void convert(String fileName, String fromCharsetName,  String toCharsetName) throws Exception {  convert(new File(fileName), fromCharsetName, toCharsetName, null);  }  /**  * 把指定文件或目录转换成指定的编码  *  * @param file  * 要转换的文件或目录  * @param fromCharsetName  * 源文件的编码  * @param toCharsetName  * 要转换的编码  * @throws Exception  */  public static void convert(File file, String fromCharsetName,  String toCharsetName) throws Exception {  convert(file, fromCharsetName, toCharsetName, null);  }  /**  * 把指定文件或目录转换成指定的编码  *  * @param file  * 要转换的文件或目录  * @param fromCharsetName  * 源文件的编码  * @param toCharsetName  * 要转换的编码  * @param filter  * 文件名过滤器  * @throws Exception  */  public static void convert(String fileName, String fromCharsetName,  String toCharsetName, FilenameFilter filter) throws Exception {  convert(new File(fileName), fromCharsetName, toCharsetName, filter);  }  /**  * 把指定文件或目录转换成指定的编码  *  * @param file  * 要转换的文件或目录  * @param fromCharsetName  * 源文件的编码  * @param toCharsetName  * 要转换的编码  * @param filter  * 文件名过滤器  * @throws Exception  */  public static void convert(File file, String fromCharsetName,  String toCharsetName, FilenameFilter filter) throws Exception {  if (file.isDirectory()) {  File[] fileList = null;  if (filter == null) {  fileList = file.listFiles();  } else {  fileList = file.listFiles(filter);  }  for (File f : fileList) {  convert(f, fromCharsetName, toCharsetName, filter);  }  } else {  if (filter == null  || filter.accept(file.getParentFile(), file.getName())) {  String fileContent = getFileContentFromCharset(file,  fromCharsetName);  saveFile2Charset(file, toCharsetName, fileContent);  }  }  }  /**  * 以指定编码方式读取文件,返回文件内容  *  * @param file  * 要转换的文件  * @param fromCharsetName  * 源文件的编码  * @return  * @throws Exception  */  public static String getFileContentFromCharset(File file,  String fromCharsetName) throws Exception {  if (!Charset.isSupported(fromCharsetName)) {  throw new UnsupportedCharsetException(fromCharsetName);  }  InputStream inputStream = new FileInputStream(file);  InputStreamReader reader = new InputStreamReader(inputStream,  fromCharsetName);  char[] chs = new char[(int) file.length()];  reader.read(chs);  String str = new String(chs).trim();  reader.close();  return str;  }  /**  * 以指定编码方式写文本文件,存在会覆盖  *  * @param file  * 要写入的文件  * @param toCharsetName  * 要转换的编码  * @param content  * 文件内容  * @throws Exception  */  public static void saveFile2Charset(File file, String toCharsetName,  String content) throws Exception {  if (!Charset.isSupported(toCharsetName)) {  throw new UnsupportedCharsetException(toCharsetName);  }  OutputStream outputStream = new FileOutputStream(file);  OutputStreamWriter outWrite = new OutputStreamWriter(outputStream,  toCharsetName);  outWrite.write(content);  outWrite.close();  } }

---------------------

CSDN也是我的博客

作者:咖啡猫没有梦

来源:CSDN

原文:

版权声明:本文为博主原创文章,转载请附上博文链接!

标签: #java导出大批量数据为txt