Java读写字符
来源:互联网 发布:大学结婚 知乎 编辑:程序博客网 时间:2024/05/16 02:39
Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类,InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换,而具体字节到字符的解码实现它由 StreamDecoder 去实现,在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。值得注意的是如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码。
Java以二进制字节方式读写文件时,不会有乱码的问题。(示例代码使用了缓存BufferedInputStream和BufferedOutputStream)
@Test public void testFileByBytes() { FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream fos = null; BufferedOutputStream bos = null; try { fis = new FileInputStream("d:/Work/readme.txt"); bis = new BufferedInputStream(fis); fos = new FileOutputStream("d:/Work/readme_bytes.txt"); bos = new BufferedOutputStream(fos); int c = 0; byte[] buf = new byte[512]; while((c = bis.read(buf)) != -1) { bos.write(buf, 0, c); } } catch (Exception e) { e.printStackTrace(); } finally { close(bis); close(bos); } }
写的情况也是类似,字符的父类是 Writer,字节的父类是 OutputStream,通过 OutputStreamWriter 转换字符到字节。
2. Java以字符方式读写文本文件时,则有可能会出现乱码。(如下示例代码指定编码格式为GBK。如果不指定编码则可能会出现中文字符乱码的问题,原因是在未明确指定字符编码的情况下,Java默认使用ISO-8859-1进行编码,从而使所有的中文字符被?所替代)
注:FileWriter/FileReader是分别继承自InputSteamReader/OutputStreamWriter实现的,不能指定字符编码。因此文本文件中有中文字符时,不建议使用。
- @Test
- public void testFileByChars()
- {
- InputStreamReader isr = null;
- OutputStreamWriter osw = null;
- try
- {
- FileInputStream fis = new FileInputStream("d:/Work/readme.txt");
- isr = new InputStreamReader(fis, Charset.forName("GBK"));
- FileOutputStream fos = new FileOutputStream("d:/Work/readme_chars.txt");
- osw = new OutputStreamWriter(fos, Charset.forName("GBK"));
- char[] cbuf = new char[512];
- int c = 0;
- while((c = isr.read(cbuf)) != -1)
- {
- osw.write(cbuf, 0, c);
- }
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- finally
- {
- close(isr);
- close(osw);
- }
- }
附文:深入分析 Java 中的中文编码问题
http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/index.html
- Java读写字符
- java 字符流 读写
- Java 读写文件 字符分隔
- java基础 字符文件的读写
- Java读写文件(字符流)简单例子
- java基础--IO字符流的读写
- JAVA IO:使用字符流读写数据
- Java文件操作(二)按照字符读写
- java 字节流字符流读写
- java 使用字符流读写数据
- 【java】:对属性文件的读写操作,中文字符解决方案
- java中 Reader Writer 类对字符流的读写
- java IO总结之字符流操作文件读写
- Java 字符流实现文件读写操作(FileReader-FileWriter)
- java中网络socket编程简单例子,用于读写字符
- Java中的文件读写字节流,字符流
- java中字节流与字符流的读写方式
- java-IO操作-使用字符流读写数据
- 解决Eclipse下的svn密码记忆问题
- xstream使用小记
- mysql批量导入txt文件数据
- 博客搬家
- JAVA UUID 生成
- Java读写字符
- Pro Android 4 第三章 理解Android中的资源
- 未来10年内 API会让网站逐渐消亡
- Js作用域与作用域链详解
- CFI directives
- php 小数整理,向上取整,向下去整,四舍五入,丢弃小数部分,保留整数部分
- Eclipse 连接小米2S Debug调试方法
- Android自动化测试(UiAutomator)简要介绍(原)
- Xcode快捷键和使用技巧