java make FileWriter FileReaderはエンコード形式なし、OutputStreamWriter InputStreamReaderはエンコード形式を設定できる。
JavaでFileWriter FileReaderを使用すると、ファイルのパスを渡して、単純にファイルの読み書きができます。
しかし、この実装は単純すぎるため、問題が発生する可能性があります。
このブログの記事内のファイルをダンプする私のコードのような単純なコード操作は、この2つのクラスを使って実装されています。
java の modify-renameTo() メソッドを使ってファイルをコピーしたりダンプしたりする例です。
上記のダンプコードをfindbugsで解析したところ、以下のようなヒントがありました。
詳細は以下の通りです。
デフォルトエンコーディングに依存することを発見: new java.io.FileWriter(String)
デフォルトエンコーディングへの依存
byteからString(またはStringからbyte)への変換を行うメソッドの呼び出しが見つかり、デフォルトのプラットフォームのエンコーディングが適切であると仮定しています。これは、アプリケーションの動作がプラットフォームによって異なる原因となります。別の API を使用し、文字セット名または Charset オブジェクトを明示的に指定してください。
そうすると、翻訳すると、次のような画像になります。
FileWriter FileReaderにエンコード形式がなく、本機のデフォルトエンコードを使用した場合、エンコードの問題でバグが発生します。
FileWriter FileReaderにエンコードフォーマットを持たせるにはどうしたらいいでしょうか?
または、ダンプファイルのコードを取って、それを修正してください。具体的な変更点は以下の通りです。
private static boolean copyFile(String src, String des) {
InputStreamReader fr = ;
OutputStreamWriter fw = ;
try {
fr = new InputStreamReader(new FileInputStream(src),"UTF-8");//read
fw = new OutputStreamWriter(new FileOutputStream(des), "UTF-8");//write
char[] buf = new char[1024];//buffer
int len;
while ((len = fr.read(buf)) ! = -1) {
fw.write(buf, 0, len);//read a few write a few
}
return true;
} catch (IOException e) {
LOG.error(e.getMessage());
return false;
} finally {
if (fr ! = ) { try {
try {
fr.close();
} catch (IOException e) {
LOG.error(e.getMessage());
}
}
if (fw ! = ) {
try {
fw.flush();
fw.close();
} catch (IOException e) {
LOG.error(e.getMessage());
}
}
}
}
を入れるのがポイントです。
FileWriter FileReaderをOutputStreamWriter InputStreamReaderに置き換えたものです。
new InputStreamReader(new FileInputStream(src), "UTF-8");//read
new OutputStreamWriter(new FileOutputStream(des), "UTF-8");//write
これにより、エンコード形式が表示されます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例