您的位置 首页 java

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

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

import java. io . File ;
import java.io.FileInputStream;
import java.io. file OutputStream;
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 FileCharset convert er { 
 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批量转换文件编码格式,针对csv和txt编码格式

文章地址:https://www.zhihuclub.com/181502.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图