Java IO文件編碼轉(zhuǎn)換實現(xiàn)代碼
對IO操作真心不是很懂。。。對編碼、亂碼也是一知半解。。。今天遇到了一個需求,要求將一個文件進行編碼轉(zhuǎn)換,并且返回編碼后的字符串,如原本的GBK編碼,轉(zhuǎn)換為UTF-8
其中這個BytesEncodingDetect 類就不貼了。主要用了里面的獲取文件編碼格式。
剛開始試了直接在源文件修改編碼方式,采用URLEncoder和URLDecoder進行轉(zhuǎn)換,卻遲遲不行。出現(xiàn)了中文奇數(shù)最后一個字亂碼
百度找了解決方法,都未果,只好采用我的思路是:先讀取源文件的內(nèi)容,存放到StringBuffer里面,然后刪除源文件,再重新new一個文件,再以另一中編碼形式存放進去。
查看編碼后效果:注意不要在eclipse查看效果,eclipse以一種編碼形式查看而已,所以可以在瀏覽器端查看如html文件,查看指定編碼可以右鍵---編碼,以此來判斷是否成功。
package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class Transcoding {
private BytesEncodingDetect encode = new BytesEncodingDetect();
public Transcoding() {
}
/**
* 編碼轉(zhuǎn)換
* @param toCharset 要轉(zhuǎn)換的編碼
* @param path 要轉(zhuǎn)換的文件路徑
* @return
* @throws Exception
*/
public String encoding(String toCharset, String path) throws Exception{
File srcFile = new File(path);
int index = encode.detectEncoding(srcFile);
String charset = BytesEncodingDetect.javaname[index];
// 編碼相同,無需轉(zhuǎn)碼
if (charset.equalsIgnoreCase(toCharset)) {
return "編碼一樣,無需轉(zhuǎn)換";
}
InputStream in = new FileInputStream(path);
BufferedReader br = new BufferedReader(
new InputStreamReader(in, charset));
StringBuffer sb = new StringBuffer();
String s1;
while ((s1=br.readLine())!=null) {
String s = URLEncoder.encode(s1, toCharset);
sb.append(s+"\r\n");//一行+回車
}
br.close();
srcFile.delete();//刪除原來文件
//重新以新編碼寫入文件并返回值
File newfile = new File(path);//重新建原來的文件
newfile.createNewFile();
OutputStream out = new FileOutputStream(newfile);
OutputStreamWriter writer = new OutputStreamWriter(out, toCharset);
BufferedWriter bw = new BufferedWriter(writer);
bw.write(URLDecoder.decode(sb.toString(), toCharset));
String result = URLDecoder.decode(sb.toString(), toCharset);
bw.flush();//刷到文件中
bw.close();
return result;
}
}
相關(guān)文章
使用Spring靜態(tài)注入實現(xiàn)讀取配置工具類新方式
這篇文章主要介紹了使用Spring靜態(tài)注入實現(xiàn)讀取配置工具類新方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Java線程基本使用之如何實現(xiàn)Runnable接口
這篇文章主要介紹了Java線程基本使用之如何實現(xiàn)Runnable接口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
IntellJ IDEA JAVA代碼任務(wù)標記實例解析
這篇文章主要介紹了IntellJ IDEA JAVA代碼任務(wù)標記實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07
如何在spring官網(wǎng)查找XML基礎(chǔ)配置文件
這篇文章主要介紹了如何在spring官網(wǎng)查找XML基礎(chǔ)配置文件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10
spring boot--從controller到DAO操作
這篇文章主要介紹了spring boot--從controller到DAO操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

