引用
package org.tarena.day03;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class FileUtil {
//多转码如:gbk转码Utf-8;
//gbk 每个字符占2个字节;
//utf-8 每个字符占3个字节,每个英文字母占一个字节;
static void copy(File from,File to,
String charsetFrom,String charsetTo) throws Exception{
InputStreamReader in = new InputStreamReader(
new FileInputStream(from),charsetFrom);
OutputStreamWriter out = new OutputStreamWriter(
new FileOutputStream(to),charsetTo);//在这里要添加编码转换方式;
char[] cbuf = new char[1024];
int n;
while((n=in.read(cbuf))!=-1){
out.write(cbuf, 0, n);
}
in.close();
out.close();
}
//创建gbk的文本文件;
static void createTextGbk(File fl) throws Exception{
OutputStreamWriter out = new OutputStreamWriter(
new FileOutputStream(fl),"GBK");
char[] cbuf = {'你','好',',','j','a','v','a'};
out.write(cbuf);
out.close();
}
public static void main(String[] args) throws Exception{
File gbk = new File("/home/soft22/Desktop/gbk.txt");
createTextGbk(gbk);
File utf = new File("/home/soft22/Desktop/utf.txt");
copy(gbk,utf,"GBK","UTF-8");
}
}
char[] cbuf = {'你','好',',','j','a','v','a'};
out.write(cbuf);
//显示结果:你好,java
gbk 文本文件:
gbk 每个字符占2个字节;
utf-8 文本文件:
utf-8 每个字符占3个字符,每个英文字母占一个字节;
引用
编码的方式:
每个字符对应一个整数。不同的国家有不同的编码,当编码方式和解码方式不统一时,产生乱码。因为美国最早发展软件,所以每种的编码都向上兼容 ASCII 所以英文没有乱码。
ASCII(数字、英文)1 个字符占一个字节(所有的编码集都兼容 ASCII)
ISO8859-1(欧洲) 1 个字符占一个字节
GB-2312/GBK 1 个字符占两个字节
Unicode 1 个字符占两个字节(网络传输速度慢)
UTF-8 变长字节,对于英文一个字节,对于汉字两个或三个字节。
InputStreamReader 和 OutputStreamWriter(字节流转化成字符流的桥转换器)
这两个类不是用于直接输入输出的,他是将字节流转换成字符流的桥转换器,并可以指定编解码方式。
Reader 和 Writer (字符流类,所有字符流的父类型)
1) Java 技术使用 Unicode 来表示字符串和字符,而且提供 16 位版本的流,以便用类似的方法处理字符。
2) InputStreamReader 和 OutputStreamWriter 作为字节流与字符流中的接口。
3) 如果构造了一个连接到流的 Reader 和 Writer,转换规则会在使用缺省平台所定义的字节编码和 Unicode之间切换。
BufferedReader/(BufferedWriter,不常用)(这两个类需要桥转换)
PrintWriter(带缓存的字符输出流,不需要桥转换)
常用输入输出类型,不需要桥接,其中其它方法请参看 API 文档。
以上两个都是过滤流,需要用其他的节点流来作参数构造对象。
BufferedReader 的方法:readLine():String ,当他的返回值是 null 时,就表示读取完毕了。要注意,再写入时要注意写换行符,否则会出现阻塞。
BufferedWriter 的方法:newLine() ,这个方法会写出一个换行符。
PrintWriter 的方法:println(….String,Object 等等)和 write(),println(...)这个方法就不必再写换行符了,
在使用时会自动换行。
注意:在使用带有缓冲区的流时,在输入之后就要 flush()方法,把缓冲区数据发出去。
原则:保证编解码方式的统一,才能不至于出现错误。
java.io 包的 InputStreamread 输入流的从字节流到字符流的桥转换类。这个类可以设定字符转换方式。
OutputStreamred:输出流的字节流桥转换成字符流
Bufferread 有 readline()使得字符输入更加方便。
在 I/O 流中,所有输入方法都是阻塞方法。
Bufferwrite 给输出字符加缓冲,因为它的方法很少,所以使用父类 PrintWrite,它可以使用字节流对象,
而且方法很多。
分享到:
相关推荐
批量文件转码工具 批量文件转码工具 批量文件转码工具 批量文件转码工具 批量文件转码工具
比如说我想把用GBK编码的/home/user/uchome目录下的文件全部转码为UTF8,转码之后的文件存储在/home/user/uchome2,那么命令为 java -jar "encoding.jar" /home/user/uchome /home/user/uchome2 GBK
实际项目中有很多文件的编码是非utf编码,当多种编码的文件相互包含时,会出现乱码。 应实际需求,特写一个java程序,将非utf8编码的文件,转换为utf8编码。省却了一个文件一个文件修改的...可快速批量的见文件转码。
天翼网关F452配置文件转码软件
批量文件转码工具,支持GBK,UTF-8转换,window下面使用,亲测可以使用!!!!!!!!!!
比如图2的转码规则就是对项目的jsp文件,不管原来是什么编码,统一转为UTF-8编码,并且同时转换文件内容。可以点击右边的Add /Remove按钮来增加/删除规则。最后点击Apply来保存设置。 step3. 转码 在设置了转码规...
批量文件转码工具,支持GBK,UTF-8转换,window下面使用,亲测可以使用!
批量文件转码工具(支持 GBK,UTF-8 转换)。 批量文件转码工具,支持GBK,UTF-8转换,window下面使用,亲测可以使用!!!!!!!!!! 批量 文件转码 工具 GBK UTF-8
对文件上传预览,这里涉及到文件转码(word、ppt、图片、Excal)
ffmpeg 音视频转码代码,在前人基础上修改,感谢CSDN。
MFC界面实现文件转码,目前支持Unicode、ANSI、UTF8三种编码格式相互转化,利用C++多态性质采用工厂模式,便于扩展更多编码格式;部分采用多线程
FFMPEG工程浩大,可以参考的书籍又不是很多...尽管该视频转码器的代码十分简单,但是几乎包含了使用FFMPEG转码一个视频所有必备的API。十分适合FFmpeg的初学者。 工程基于VC2010。 使用了2014.5.6版本的FFmpeg类库。
监控视频.dav文件转码工具,支持转换为多种格式(MP4、AVI、WMV、MXF、GIF、DPG、MTV、AMV、SWF等多种格式,应有尽有。)。本软件为英文版软件,没有中文版,介意的话不要下载,避免浪费积分。也可当播放器使用,...
炫酷乐转码先生是北京坤腾世纪科技有限公司面向个人和家庭用户推出的一款免费软件产品,它可以将各种来源的音视频文件转换成各种不同的格式,而且转码质量稳定,支持批量转码,速度快,可称之为“万能转码器”。...
多文件转码小程序,linux文件夹拷贝到windows下,往往会出现乱码,此程序可帮您批量进行转码
获取文件编码格式与文件转码,提供几个工具方法
C#获取视频文件信息及视频转码操作,补充之前的压缩分卷的不完整,此为完整版
音频文件转码java开发,基于jave开源技术。 音频文件转码java开发,基于jave开源技术。