csv编码格式转换(csv文件编码格式怎么转换)

指南 0 669

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

import java.io.File;

import java.io.FileInputStream;

csv编码格式转换(csv文件编码格式怎么转换)

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也是我的博客 作者:咖啡猫没有梦

原文:https://blog.csdn.net/oftoo/article/details/74984425

相关推荐: