Java中国語文字を読み込むファイル


よく知られているように、javaの中国語の問題はずっと難しい問題であり、この現象はcsdnのjavaフォーラムで中国語の文字化けした質問率について知ることができ、ソフトウェアの巨人IBMが中国語の問題を解決する専門区を開いて、俗人として(キム・ケリーのように「偽の天神」になることを夢見ていた)ああ、ただずっと成功しなかったのは、神様が中国の世話をしてくれなかったからかもしれない)、私も同意の問題に困っていたので、今日解決しました.
    私が.netプラットフォームを徹底的に放棄するにつれて(生活が迫っているだけで、結局私はまだ生活しなければなりません)、元の資源をJavaプラットフォームに移すのは私の現在の重要な任務の一つで、ここまで言うと、.netは中国語の問題に対してよく解決していることを認めざるを得ません.たまに文字化けが発生しますが.
ファイルを開くことでファイルの符号化を指定する方法で、この問題を簡単に解決しました.
  最後にまとめるとjavaがデータストリームを読み込むときは必ずデータストリームの符号化方式を指定します(少なくともStringストリームを読み取るときはそうします.
UTF-8で文字化けして読み取れば、GBKかGB 2312で試してみると、きっと成功します.
	/**
	 *       
	 * 
	 * @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)          1文字ずつ書き込みます. void write(String s, int off, int len)          文字列の一部を書き込みます.