java读写中文文件
在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码。原因其实很简单,就是系统的编码和程序的编码采用了不同的编码格式。通常,假如自己不修改的话,windows自身采用的编码格式是gbk(而gbk和gb2312基本上是一样的编码方式),而IDE中Encode不修改的话,默认是utf-8的编码,这就是为什么会出现乱码的原因。当在OS下手工创建并写入的txt文件(gbk),用程序直接去读(utf-8),就会乱码。为了避免可能的中文乱码问题,最好在文件写入和读出的时候显式指定编码格式。
可以观察其实windows下的记事本的默认的格式是ANSI,查看方式就是创建一个新的文本文件然后点击另存为
在简体中文Windows操作系统中,ANSI
编码代表 GBK 编码,所以win系统的编码方式是gbk,不可以用utf-8去读,
在Java中,如果我们用java.io.FileReader或者java.io.FileWriter来读写文件的话,固然我们可以通过 java.io.BufferedReader和java.io.BufferedWriter来提高效率,但是我们会发现在FileReader和 FileWriter中我们只能获取编码方式,而不能设置。这样,在FileReader和FileWriter中的编码设置只能服从于一些更为底层的设置,那么在读写多种语言编码的文件时就很容易出现乱码。
另外一种方法就是采用java.io.FileInputStream/java.io.InputStreamReader和 java.io.FileOutputStream/java.io.OutputStreamWriter来解决这个问题。在 InputStreamReader和OutputStreamWriter中,可以通过指定编码方式来完成gbk文件的读写。
//默认情况下,win系统编码是gbk/gbk2312,读取和写入时加入编码字符集可以解决乱码
public class ReadAndWrite {
private static void test(){
File firstFile = new File("D://fileone.txt");
File secondFile=new File("D://filesecond.txt");
BufferedReader in = null;
BufferedWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream(firstFile), "gbk"));
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(secondFile), "gbk"));
String line = "";
while((line = in.readLine())!=null){
System.out.println(line);
out.write(line+"\r\n");
}
} catch (FileNotFoundException e) {
System.out.println("file is not fond");
} catch (IOException e) {
System.out.println("Read or write Exceptioned");
}finally{
if(null!=in){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}}
if(null!=out){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}}}}
}
还有一定要写BufferedWriter out的close不然什么都不会被写入文件的,这点至关重要!!!注意要写入换行时,一定要\r\n,否则无效
java读写中文文件的更多相关文章
- Java读写.properties文件实例,解决中文乱码问题
package com.lxk.propertyFileTest; import java.io.*; import java.util.Properties; /** * 读写properties文 ...
- Java读写资源文件类Properties
Java中读写资源文件最重要的类是Properties 1) 资源文件要求如下: 1.properties文件是一个文本文件 2.properties文件的语法有两种,一种是注释,一种属性配置. 注 ...
- C++读写EXCEL文件OLE,java读写excel文件POI 对比
C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...
- Java读写txt文件
1.Java读取txt文件 1.1.使用FileInputStream: public static String readFile(File file, String charset){ //设置默 ...
- Java 读写XML文件 API--org.dom4j
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...
- java读写excel文件( POI解析Excel)
package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...
- 《Java知识应用》Java读写DBF文件
1. 准备: Jar包下载:链接: https://pan.baidu.com/s/1Ikxx-vkw5vSDf9SBUQHBCw 提取码: 7h58 复制这段内容后打开百度网盘手机App,操作更方便 ...
- java读写大文件
java读写2G以上的大文件(推荐使用以下方法) static String sourceFilePath = "H:\\DataSource-ready\\question.json&qu ...
- JAVA读写CSV文件
最近工作需要,需要读写CSV文件的数据,简单封装了一下 依赖读写CSV文件只需引用`javacsv`这个依赖就可以了 <dependency> <groupId>net.sou ...
随机推荐
- quartz2D简单使用
quartz2D绘图 1:上下文:context,这个翻译不好理解,其实翻译环境更好一点,就是给了你一个画板,你看不到而已 在: CGContextRef ctx = UIGraphicsGetCur ...
- javascript_04 数据类型
ECMAScript 数据类型 标准 核心 数据类型 typeof 判断数据类型 数字型 布尔型 对象类型 函数 字符串 undefined 未定义 数字型 字符型 var s='1233 ...
- 转载:百度原CTO李一男经典语录
原文地址:http://www.cnblogs.com/marvin/archive/2010/01/20/1652088.html 百度原CTO李一男经典语录 [1]好好规划自己的路,不要跟着感觉走 ...
- 快速幂取模 分类: ACM TYPE 2014-08-29 22:01 95人阅读 评论(0) 收藏
#include<stdio.h> #include<stdlib.h> //快速幂算法,数论二分 long long powermod(int a,int b, int c) ...
- HDAO one error
对normal target设置的background clearcolor 导致 远处天空 通过了 normalRejectTest 所以要对normal target单独设置 不能通过test的 ...
- centos使用更新更快的yum源
The Remi Repo is a yum repository maintained by a French dude - Remi Collet. It contains much more u ...
- JavaScript之数据类型讲解
JavaScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型——Object,Object本质上是由一 ...
- Java多线程程序设计详细解析
一.理解多线程 多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立. 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线 ...
- 简单shell脚本
简单shell脚本备忘 #!/bin/sh num= ] do table_num=`printf %03d ${num}` echo album_info_${table_num} #mys ...
- codeforces #232 div2 解题报告
A:简单题:我们可以把点换成段处理,然后枚举段看是否被霸占了: #include<iostream> #include<]; ]=; ;i<=n;i++) { ...