java实现在不同编码之间进行文件转换程序

java实现在不同编码之间进行文件转换,使用 InputStreamReader 或者FileReader 类,它们可以自动地把某个特定字符编码转换为本地字符代码。否则就使用DataOutputStream 类当中的writeUTF()方法以Unicode 文本写字符串,当然,读取的时候必须使用DataInputStream 打开它,并且使用readUTF()方法读取这些字符串。
为什么要转换编码呢?大家都知道,Java 语言是以Unicode 为基础的,但是操作系统都有它们自己内部的可能是与Unicode 不兼容的编码方式,所以用户收到的输入可能属于不同的代码系统,程序显示给用户的字符串最终必须使用当地的操作系统可以识别的方法对其进行译码。
转换不同编码,具体实现步骤:

1.编写ConvertEncoding 类的基本框架,该类包括main()方法、usage()方法和convert()方法:

 代码如下 复制代码
public class ConvertEncoding
{
public static void main(String[] args);
public static void usage();
public static void convert(String infile, String outfile, String from, String to)
throws IOException, UnsupportedEncodingException;
}

2.Main()方法实现了实现了把一种编码形式的文件,转换成为另外一种编码形式:

 代码如下 复制代码

public static void main(String[] args)
{
String from = null, to = null;
String infile = null, outfile = null;
for(int i = 0; i <args.length; i++) { // 处理命令行参数
if (i == args.length-1) usage(); .
if (args[i].equals("-from")) from = args[++i];
else if (args[i].equals("-to")) to = args[++i];
else if (args[i].equals("-in")) infile = args[++i];
else if (args[i].equals("-out")) outfile = args[++i];
else usage();
}
try { convert(infile, outfile, from, to); } // 开始转换
catch (Exception e)
{ // 处理例外
System.exit(1);
}
}

3.usage()方法实现了提醒用户命令行的正确输入,代码如下:

 代码如下 复制代码

public static void usage()
{
System.err.println("Usage: java ConvertEncoding <options>\n" +
"Options:\n\t-from <encoding>\n\t" +
"-to <encoding>\n\t" +
"-in <file>\n\t-out <file>");
System.exit(1);
}

4.Convert()方法实现了编码方式的转换,代码如下:

 代码如下 复制代码
public static void convert(String infile, String outfile, String from, String to)
throws IOException, UnsupportedEncodingException
{
// Set up byte streams.
InputStream in;
if (infile != null) in = new FileInputStream(infile);
else in = System.in;
OutputStream out;
if (outfile != null) out = new FileOutputStream(outfile);
else out = System.out;
// 设置缺省的编码方式
if (from == null) from = System.getProperty("file.encoding");
if (to == null) to = System.getProperty("file.encoding");
// 建立用于读写的字符流
Reader r = new BufferedReader(new InputStreamReader(in, from));
Writer w = new BufferedWriter(new OutputStreamWriter(out, to));
/** 把字符从输入Copy 到输出。InputStreamReader
* 把字符从原始编码方式转为Unicode
* OutputStreamWriter 则把字符从Unicode 编码转换为指定的输出编码方式
* 不能用指定输出编码方式编码的字符输出为'?'
**/
char[] buffer = new char[4096];
int len;
while((len = r.read(buffer)) != -1) .
w.write(buffer, 0, len); .
r.close(); .
w.close();
}

注意:ConvertEncoding 类需要引入import java.io.*;

时间: 2024-11-01 18:23:46

java实现在不同编码之间进行文件转换程序的相关文章

Java中的字符集编码入门(四) 网页文件的编码

接着上节的思路说,一个网页要想在浏览器中能够正确显示,需要在三个地方保持编码的一致:网页文件,网页编码声明和浏览器编码设置. 首先是网页文件本身的编码,即网页文件在被创建的时候使用什么编码来保存.这个完全取决于创建该网页的人员使用了什么编码保存,而进一步的取决于该人员使用的操作系统.例如我们使用的中文版WindowsXP系统,当你新建一个文本文件,写入一些内容,并按下ctrl+s进行保存的那一刻,操作系统就替你使用GBK编码将文件进行了保存(没有使用UTF-8,也没有使用UTF-16).而使用了

文件拷贝-java如何实现不同服务器之间文件的传递

问题描述 java如何实现不同服务器之间文件的传递 我想要调用一个服务器上的servelet,该servlet会调用.bat的文件,实现将该服务器上 的文本文件传递到另一台服务器上的指定目录下.现在遇到一个技术问题,无法实现文本由一台服务器拷贝到另一台服务器上, 但是以下情况是可以实现的: 1.单独执行.bat文件是可以实现不同服务器之间的拷贝的 2.用服务器调用将文件拷贝到本地也是可以的 3.有说用socket方法解决,但是另一端的服务器是不可以配置java的环境的 解决方案 我当时是这样干的

java与delphi之间的文件传输问题

问题描述 java与delphi之间的文件传输问题 使用socket进行通信 delphi作为客户端中使用的是文件流TfileStream传送文件 java作为服务端用的InputStreamReader获取 悲催的问题来了 服务端获取不到文件中的末尾也就是说不知道文件传输是否结束 文件传完了也一直连着 后来使用一个比较笨的办法解决 用新建了一个缓存区buf去取数据一次只取一部分 当buf取到的值不满时就判断文件传输完成- 所以悲催的新问题又来了 文件还只是传一部分就结束了 所以想请问一下各位大

Java中的字符编码问题处理心得总结_java

当面对一串字节流的时候,如果不指定它的编码,其实际意义是无法知道的. 这句话应该也是我们面对"字符转字节,字节转字符"问题时候时刻记在脑子里的.否则乱码问题可能就接踵而至. 其实乱码问题的本质就是Encoding和Decoding用的不是一个编码,明白了这个道理就很好解决乱码问题了. Java中常见的时候有如下: 1. String类使用byte[]的构造函数 String(byte[] bytes),String类同时提供了两个重载 (1)String(byte[] bytes, C

字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?

转自:  http://apps.hi.baidu.com/share/detail/17798660 字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得字符编码的知识.不注意的人可能对这个不在意,但这些名词有时候实在让人迷惑,对想学习计算机知识的人来说,搞懂它也十分重要,我也是在学习中慢慢了解了一些这方面的知识. 1. ASCII码      在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被

java_web 中src和web之间各个文件是如何配置的。

问题描述 我正在学习java_web,对src和web之间各个文件的关联和配置迷糊,希望大侠能举个简单的例子,具体点介绍一下,我用的是intellij9.0.一直在线等... 解决方案 解决方案二:配置????这是什么意思....web是存放页面的比如说:jsp,html.src是存放java代:Javabean,servlet啥的!!解决方案三:src目錄是可以指定的,預設是project下的src,這目錄開發時放源碼,發佈程序時就不是很重要.web比較重要的是WEB-INF目錄,裡面可以加l

Java使用jxl.jar包写Excel文件的最适合列宽问题基本实现

以前用jxl.jar包,读写过Excel文件.也没有注意最适合列宽的问题,但是jxl.jar没有提供最适合列宽的功能,上次用到写了一下,可以基本实现最适合列宽. 注意,这个只是基本可以实现,基本针对中文电子报表. 1.实现思路 (1)一般的中文汉字占位长度是英文字母的2倍,"方块字"很统一. (2)对于要写入Excel中的数据统计每一列的最大列宽,最后直接将这一列的列宽设置为这个列的最大值即可. 2.实现代码 import java.io.File; import java.util.

编程-[求助]使用java在指定的目录下实现文件的模糊搜索

问题描述 [求助]使用java在指定的目录下实现文件的模糊搜索 一.功能要求: 用户单击"选择地址"按钮,程序自动打开文件夹选择器(如图2),用户选定用户选择目标文件夹后,输入文件名(可包含"*"表示任意连续多个字符,"?"示任意一个字符),选择文件的扩展名.程序自动获取指定目录下满足条件的所有文件,并显示在窗体中(如图1).二.关键技术: 首先获取指定目录下的文件数组,再从该数组中查询满足条件的文件.三.实现的图形用户界面如下: 解决方案 已经

utf8编码网页包含文件时前面有空行的解决

页面采用UTF8编码,头部和尾部用了模板包含文件的方法,结果头部和尾部无端端各多出一个约10px的空行,什么也没有. 原因是全部采用utf8编码,包含文件的时候,最后的二进制流中包含了多次UTF8 BOM标记,IE不能正常解析包含多个UTF8 BOM 标记的页面,直接替换成实际显示的回车,这样导致一个空行,而firefox却没有这个问题. 故如果模板采用包含的方法包含多个utf8文件需要用ultraedit保存时另存为功能 选择utf8 无bom格式保存即可. 另外,如果中文页面在html he