Java IO文件编码转换实现代码攻略:
一、文件编码介绍
在Java中IO流常见的字符编码有以下四种:
-
ASCII码:使用一个字节表示一个字符,只包含英文字母、数字和一些常用的符号,共128个字符。
-
ISO-8859-1:使用一个字节表示一个字符,共包含256个字符,包含了ASCII码字符。
-
GBK:使用两个字节表示一个字符,包含了大量的汉字,也支持英文字母、数字和一些常用的符号。
-
UTF-8:使用1-3个字节表示一个字符,支持世界上所有的语言,包括中文、英文、拉丁字母、俄语等等,常用于在互联网上编码。
二、编码转换代码实现
- Java NIO实现:
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public class EncodingConversionUtil {
public static void convertEncoding(String srcFilePath, String srcEncoding, String destFilePath, String destEncoding) throws IOException {
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(srcFilePath), Charset.forName(srcEncoding)));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destFilePath), Charset.forName(destEncoding)))) {
char[] buffer = new char[8192];
int len;
while ((len = bufferedReader.read(buffer)) != -1) {
bufferedWriter.write(buffer, 0, len);
}
}
}
public static void main(String[] args) throws IOException {
String srcFilePath = "test.txt";
String srcEncoding = "GBK";
String destFilePath = "test-utf8.txt";
String destEncoding = "UTF-8";
convertEncoding(srcFilePath, srcEncoding, destFilePath, destEncoding);
}
}
代码解析:
1.本代码采用Java NIO实现,可以处理大文件,效率较高。
2.通过使用BufferedReader、BufferedWriter对文件进行读写操作,避免频繁读写文件。
3.使用Charset.forName()方法获取字符编码对象,并指定源文件编码(srcEncoding)和目标文件编码(destEncoding)。
- 使用Apache Commons IO实现:
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
public class EncodingConversionUtil {
public static void convertEncoding(String srcFilePath, String srcEncoding, String destFilePath, String destEncoding) throws IOException {
String fileContent = FileUtils.readFileToString(new File(srcFilePath), Charset.forName(srcEncoding));
FileUtils.writeStringToFile(new File(destFilePath), fileContent, Charset.forName(destEncoding));
}
public static void main(String[] args) throws IOException {
String srcFilePath = "test.txt";
String srcEncoding = "GBK";
String destFilePath = "test-utf8.txt";
String destEncoding = "UTF-8";
convertEncoding(srcFilePath, srcEncoding, destFilePath, destEncoding);
}
}
代码解析:
1.本代码采用Apache Commons IO实现,可以快速简单地轻松完成编码转换。
2.使用FileUtils类的readFileToString方法读取源文件内容,writeStringToFile方法写入目标文件内容。
3.使用Charset.forName()方法获取字符编码对象,并指定源文件编码(srcEncoding)和目标文件编码(destEncoding)。
三、示例演示
- 示例1:将GBK编码的文件转换为UTF-8编码的文件
源文件路径:E:/test.txt
源文件编码:GBK
目标文件路径:E:/test-utf8.txt
目标文件编码:UTF-8
import java.io.*;
import java.nio.charset.Charset;
public class EncodingConversionUtil {
public static void convertEncoding(String srcFilePath, String srcEncoding, String destFilePath, String destEncoding) throws IOException {
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(srcFilePath), Charset.forName(srcEncoding)));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destFilePath), Charset.forName(destEncoding)))) {
char[] buffer = new char[8192];
int len;
while ((len = bufferedReader.read(buffer)) != -1) {
bufferedWriter.write(buffer, 0, len);
}
}
}
public static void main(String[] args) throws IOException {
String srcFilePath = "E:/test.txt";
String srcEncoding = "GBK";
String destFilePath = "E:/test-utf8.txt";
String destEncoding = "UTF-8";
convertEncoding(srcFilePath, srcEncoding, destFilePath, destEncoding);
}
}
执行结果:源文件内容从GBK编码转换为UTF-8编码,并保存到目标文件中。
- 示例2:将ISO-8859-1编码的文件转换为GBK编码的文件
源文件路径:E:/test.txt
源文件编码:ISO-8859-1
目标文件路径:E:/test-gbk.txt
目标文件编码:GBK
import java.io.*;
import java.nio.charset.Charset;
public class EncodingConversionUtil {
public static void convertEncoding(String srcFilePath, String srcEncoding, String destFilePath, String destEncoding) throws IOException {
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(srcFilePath), Charset.forName(srcEncoding)));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destFilePath), Charset.forName(destEncoding)))) {
char[] buffer = new char[8192];
int len;
while ((len = bufferedReader.read(buffer)) != -1) {
bufferedWriter.write(buffer, 0, len);
}
}
}
public static void main(String[] args) throws IOException {
String srcFilePath = "E:/test.txt";
String srcEncoding = "ISO-8859-1";
String destFilePath = "E:/test-gbk.txt";
String destEncoding = "GBK";
convertEncoding(srcFilePath, srcEncoding, destFilePath, destEncoding);
}
}
执行结果:源文件内容从ISO-8859-1编码转换为GBK编码,并保存到目标文件中。
四、总结
本文通过介绍编码基础知识和两个实现代码及示例的方式,详细讲解了Java IO文件编码转换的实现方法。希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java IO文件编码转换实现代码 - Python技术站