用java修改文件的编码

1、将本地的文件转换成另外一种编码输出,主要逻辑代码如下:

 1  /**
 2      * 将本地文件以哪种编码输出
 3      * @param inputfile 输入文件的路径
 4      * @param outfile 输出文件的路径
 5      * @param code 输出文件的编码
 6      * @throws IOException
 7      */
 8     public  void convert(String inputfile,String outfile,String code) throws IOException {
 9         StringBuffer sb = new StringBuffer();
10         //得到当前文件的编码
11         String ch=getCharset(inputfile);
12         InputStreamReader isr=null;
13         OutputStreamWriter osw =null;
14         //根据当前文件编码进行解码
15         if(ch.equals("UTF8")){
16             isr= new InputStreamReader(new FileInputStream(inputfile), "UTF-8");
17         }else if(ch.equals("Unicode")){
18             isr= new InputStreamReader(new FileInputStream(inputfile), "Unicode");
19         }else {
20             isr= new InputStreamReader(new FileInputStream(inputfile), "GB2312");
21         }
22         //将字符串存入StringBuffer中
23         BufferedReader br = new BufferedReader(isr);
24         String line = null;
25         while ((line = br.readLine()) != null) {
26             sb.append(line + "\n");
27         }
28         br.close();
29         isr.close();
30
31         //以哪种方式写入文件
32         if("UTF-8".equals(code)){
33             osw = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
34         }else if("GB2312".equals(code)){
35             osw = new OutputStreamWriter(new FileOutputStream(outfile), "GB2312");
36         }else if("Unicode".equals(code)){
37             osw = new OutputStreamWriter(new FileOutputStream(outfile), "Unicode");
38         }else{
39             osw = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
40         }
41         BufferedWriter bw = new BufferedWriter(osw);
42         bw.write(sb.toString());
43         bw.close();
44         osw.close();
45     }
46
47 /**
48      * 根据文件路径判断编码
49      * @param str
50      * @return
51      * @throws IOException
52      */
53     private String getCharset(String str) throws IOException{
54         BytesEncodingDetect s = new BytesEncodingDetect();
55         String code = BytesEncodingDetect.javaname[s.detectEncoding(new File(str))];
56         return code;
57     } 

2、将远程的文件转换成自己想要的编码,然后写入本地

 1 /**
 2      * 将远程文件以哪种编码输出到本地
 3      * @param fileurl 远程文件的URL
 4      * @param outfile 输出文件的路径
 5      * @param code 以哪种编码输出
 6      * @throws Exception
 7      */
 8     public void Remote(String fileurl,String outfile,String code) throws Exception{
 9         //        String str="http://172.18.1.103:8080/kms/text.txt";
10         URL url =new URL(fileurl);
11         HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
12         //设置连接超时和读取超时
13         urlCon.setConnectTimeout(5000);
14         urlCon.setReadTimeout(5000);
15         //得到远程文件的编码
16         String ch=getCharset_Remote(fileurl);
17         //文件写入流
18         OutputStreamWriter osw =null;
19         BufferedReader br=null;
20         //将字符串保存到临时的StringBuffer中
21         StringBuffer sb = new StringBuffer();
22         if(ch.equals("UTF8")){
23             br =new BufferedReader(new InputStreamReader( urlCon.getInputStream(),"UTF-8"));
24             String line = null;
25             while ((line = br.readLine()) != null) {
26                 sb.append(line + "\n");
27             }
28         }
29         else if(ch.equals("Unicode")){
30             br =new BufferedReader(new InputStreamReader( urlCon.getInputStream(),"Unicode"));
31             String line = null;
32             while ((line = br.readLine()) != null) {
33                 sb.append(line + "\n");
34             }
35         }
36         else{
37             br =new BufferedReader(new InputStreamReader( urlCon.getInputStream(),"GB2312"));
38             String line = null;
39             while ((line = br.readLine()) != null) {
40                 sb.append(line + "\n");
41             }
42         }
43         br.close();
44
45         //以哪种方式写入文件
46         if("UTF-8".equals(code)){
47             osw = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
48         }else if("GB2312".equals(code)){
49             osw = new OutputStreamWriter(new FileOutputStream(outfile), "GB2312");
50         }else if("Unicode".equals(code)){
51             osw = new OutputStreamWriter(new FileOutputStream(outfile), "Unicode");
52         }else{
53             osw = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
54         }
55         BufferedWriter bw = new BufferedWriter(osw);
56         bw.write(sb.toString());
57         bw.close();
58         osw.close();
59     }
60
61 /**
62      * 根据文件路径判断远程文件编码
63      * @param str
64      * @return
65      * @throws IOException
66      */
67     private String getCharset_Remote(String str) throws IOException{
68         URL url =new URL(str);
69         BytesEncodingDetect s = new BytesEncodingDetect();
70         String fileCode = BytesEncodingDetect.javaname[s.detectEncoding(url)];
71         return fileCode;
72     }

3、测试代码:

 1 package com.zhang.test;
 2
 3 public class test {
 4     public static void main(String[] args) {
 5         String inputfile="D:/gbk.txt";
 6         String outfile="D:/utf8.txt";
 7         String outfileurl="D:/utf8url.txt";
 8         String fileurl="http://127.0.0.1:8080/jsp/gbk.txt";
 9 //        String file="D:/unicode.txt";
10         Convert_Code code=new Convert_Code();
11         try {
12             code.convert(inputfile,outfile,"UTF-8");
13             code.Remote(fileurl, outfileurl, "UTF-8");
14         } catch (Exception e) {
15             e.printStackTrace();
16         }
17     }
18 }

注意:这两个方法引用了BytesEncodingDetect.java文件

此案例的下载链接:

时间: 2024-09-30 00:52:02

用java修改文件的编码的相关文章

java修改文件为只读权限

原文:java修改文件为只读权限 代码下载地址:http://www.zuidaima.com/share/1550463260658688.htm 通过java可以修改文件为只读权限 package com.zuidaima.util.file; import java.io.File; import java.io.IOException; /** * 修改文件为只读权限 * * @author javaniu * */ public class MakeFileReadOnly { pub

java中文件的编码(在建立text文本时,如果文件中只写联通或是联,再次打开的时候就会出现乱码,下面就是原理)

public class EcodeDemo { public static void main(String[] args) throws Exception { String str = "生活ABC"; // 将字符串序列化 byte[] bytes = str.getBytes(); for (byte b : bytes) { /* * Integer.toHexString的参数是int, 如果不进行&0xff,那么当一个byte会转换成int时, * 由于int是

eclipse实现批量修改文件的编码方式

http://blog.csdn.net/haorengoodman/article/details/38493007 在eclipse+MyEclipse环境下,打开一个jsp文件,经常发现汉字无法显示,右键点击查看这个文件属性,发现文件的字符编码属性为ISO-8859-1.   目前的解决方法有:1. 手工把文件属性改成GBK,每个文件都要做设置,很麻烦.2. 不要在Eclipse中编辑jsp,来回在两个环境中切换,也很麻烦3. 在每个jsp中加入pageEncoding指令,明确指定编码.

java修改文件内容

文件的读和写,大家都不陌生,但是修改呢?按照普通的读写流去修改的话,只能全部读取出来,在内存中修改好后,全部写进去,这样对于文件内容过多的时,性能很低. 最近在遇到这个问题的时候,发现RandomAccessFile这个类正好能解决我的问题,废话不多说,下面直接贴代码,分享给大家,有不对的地方欢迎指教,谢谢 /**     * 修改文件内容     * @param fileName     * @param oldstr     * @param newStr     * @return  

字符集与编码--Java class文件的编码方式

1 public static void main(String[] args) throws UnsupportedEncodingException { 2 /** 3 * 1. char 和 String 在内存中保存都使用Java内码,也即UTF-16 4 * 2. char 在class文件中使用UTF-16表示 5 * 3. String在class文件中使用UTF-8表示 6 * 4. 序列化和Class文件中用"modified UTF-8",不是UTF-8.参考htt

Java修改文件名称

import java.io.File;import java.io.IOException; public class Rename { public static void main(String[] args) throws IOException  {   File oldFile = new File("d:/1.Out");  if(!oldFile.exists())  {   oldFile.createNewFile();  }  System.out.println

Java Class 文件的编码

在网上查找了一些资料,称Class文件是UTF-8格式保存的. 下面利用一个简单的程序来证明这个事实. 1 public class ClassFileEncode { 2 public static void main(String[] args) {3 String s = "中国"; 4 System.out.println(s); 5 } 6 } 字符 "中" 对应的码点是 0x4e2d , UTF-8编码为0xe4b8ad 字符 "国"

如何将Java源代码文件的编码从GBK转为UTF-8?

有时候看到有意思的demo,在头痛导入项目的编码和workspace的编码不一样的时候 我试着将 笔记本打开一个类一个类的复制, demo的类比较少的时候 可以忍受,demo的类多的时候 除了靠之外 别无办法 今天再找仿ios样式demo的时候 实在受不了乱码,新浪一搜,出现给力的工具类 大致思路 挺简单的 无非是找到路径 重新转码.谢谢 作者,尊重原创. http://blog.sina.com.cn/s/blog_7e4ac8b501019ujd.html

java 图片文件Base64编码与二进制编码格式互相转换

1 public static byte[] base64String2ByteFun(String base64Str){ 2 BASE64Decoder decoder = new BASE64Decoder(); 3 byte[] b = null; 4 try { 5 b = decoder.decodeBuffer(base64Str); 6 for (int i = 0; i < b.length; ++i) { 7 if (b[i] < 0) { 8 b[i] += 256; 9