Java读取中文字符的文件

    众所周知,java的中文问题一直是一个老大难的问题,这个现象可以在csdn中java论坛里关于中文乱码的提问率就可以了解到,甚至软件巨人IBM专 门开辟了一个解决中文问题的专区,作为一个俗人(一直梦想希望想金凯利那样成为一个“冒牌天神”,只是一直没有成功,也许是因为上帝不照顾中国吧),我也 为同意的问题困扰,好在今天解决了。

    随着我对.net平台的彻底放弃(只是生活所迫,毕竟我还要生活),将原有的资源转到Java平台上来是我当前的一个重要任务之一,说到这里,不得不承认.net对中文问题解决的很好,虽然偶尔也会出现乱码。

通过打开文件是指定文件编码的方法把这个问题轻松的解决了。

  最后总结一下:java要读取数据流的时候一定要指定数据流的编码方式(至少读取String流的时候要这么作。

如果使用UTF-8读取出来是乱码,用GBK 或者 GB2312试试,一定会成功的。

	/**
	 * 读取文件内容
	 * 
	 * @param filePathName
	 *            文件名称
	 * @return 文件内容
	 */
	public static byte[] readFileByBytes(String filePathName) {
		StringBuffer sb = new StringBuffer("");
		InputStreamReader in = null;
		try {
			String fileFullPathAndName = PathUtil
					.getKnowbaseFilePath(filePathName);
			File file = new File(fileFullPathAndName);
			BufferedReader reader = new BufferedReader(in);
			if (file.exists()) {
				in = new InputStreamReader(new FileInputStream(file), "UTF-8");
				String line;
				while ((line = reader.readLine()) != null) {
					sb.append(line);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
				} catch (IOException ex) {
					ex.printStackTrace();
				}
			}
		}

		return sb.toString().getBytes();
	}

     这里,Java的读文件和写文件都是基于字符流的,主要用到下面的几个类:
1、FileReader----读取字符流
2、FileWriter----写入字符流
3、BufferedReader----缓冲指定文件的输入
该类的方法有:
void close() 
        关闭该流。
 void mark(int readAheadLimit) 
        标记流中的当前位置。
 boolean markSupported() 
        判断此流是否支持 mark() 操作(它一定支持) int read() 
        读取单个字符。
 int read(char[] cbuf, int off, int len) 
        将字符读入数组的某一部分。
 String readLine() 
        读取一个文本行。
 boolean ready() 
        判断此流是否已准备好被读取。
 void reset() 
        将流重置为最新的标记。
 long skip(long n) 
        跳过字符。
4、BufferedWriter----将缓冲对文件的输出
该类的方法有:
void close() 
        关闭该流。
 void flush() 
        刷新该流的缓冲。
 void newLine() 
        写入一个行分隔符。
 void write(char[] cbuf, int off, int len) 
        写入字符数组的某一部分。
 void write(int c) 
        写入单个字符。
 void write(String s, int off, int len) 
        写入字符串的某一部分。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值