ログファイルの文字化けの原因と解決方法

このQ&Aのポイント
  • ログファイルの文字化けについて相談です。
  • UNIXでTOMCATを使用している際、ログインしないでAUTOでTOMCATを起動するとログが文字化けしてしまいます。
  • ログファイルの作成方法について、より良い方法はありますか?
回答を見る
  • ベストアンサー

ログファイルの文字化け

以前、ここでログ部品の作り方を教えていただきました。 ありがとうございます。 サーバーはUNIXでTOMCATを使っています。 ログインしてからTOMCATを起動するとログは正常に出るのですが、ログインせずにAUTOでTOMCATを起動するとログが文字化けしてしまいます。 File file = new File("log.log"); FileOutputStream OpS = new FileOutputStream(file.getPath(), true); BufferedWriter BW = new BufferedWriter(new OutputStreamWriter(OpS)); BW.write(value); BW.newLine(); BW.close(); といった形で作っているのですが、何かよい方法はないでしょうか?

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

OutputStreamWriterのコンストラクタで エンコーディングを指定してみては。

参考URL:
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/io/OutputStreamWriter.html#OutputStreamWriter(java.io.OutputStream,%20j
hilo256
質問者

お礼

簡単なことでしたね。有難うございます。

関連するQ&A

  • BufferedWriter(OutPutStream).write(String)で追記がしたい

    環境 windowsXP+tomcat4.0.1 Servlet内でExceptionをcatchし、ファイルに書き出したいのですが、追記が出来ません。上書きされてしまって困っています。 コード: FileOutputStream fos = new FileOutputStream(String); OutputStreamWriter osw = new OutputStreamWriter(fos,"M932"); BufferedWriter bw = new BufferdWriter(osw); bw.write(String); 最後のwrite()を追記型で起動したいのですが、参考書にBufferedWriterクラスに関することがほとんど載っていないため、どうしたらいいのやら。 ご存知の方がいましたら、ご回答お願いいたします。

    • ベストアンサー
    • Java
  • BufferedWriterのcloseメソッド

    ファイル出力に関して、次のようなコードをよく目にします。 例外処理省略 FileOutputStream fos = new FileOutputStream("hoge.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw); //ファイルに出力 bw.close(); osw.close(); fos.close(); 同様の処理で、次のようなコードも目にします。 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("hoge.txt"))); //ファイルに出力 bw.close(); 下のコードで、関連するソースを見てみると、BufferedWriterオブジェクトをcloseする際に、そのオブジェクトが参照を持っているOutputStreamWriterオブジェクトはcloseされているように見えるのですが、FileOutputStreamオブジェクトがcloseされているようには見えませんでした。 下のようなコードは安全といえるのでしょうか?BufferedWriterオブジェクトのcloseで引数として渡される各オブジェクトもcloseされるのでしょうか?

  • 文字化けをなおしたいです。

    下記のようなプログラムで、文字をテキストに出力しているのですが、文字化けしてしまう文字があります。 どのように対処すればよろしいのか教えていただけないでしょうか。(ソース中の(文字化けのする文字)には、例えば、はしごたかの高などです。) OSはhp-uxです。 ======== class test { public static void main(String args[]) { try { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out.txt",true), "Shift_JIS")); String msg=""; msg="(文字化けのする文字)"; bw.write(msg); bw.flush(); bw.close(); } catch (IOException e) { System.err.println(e); } } }

    • ベストアンサー
    • Java
  • file操作時のエラー

    現在、Eclipseを開発環境としたJavaでのファイル操作の勉強をしているのですがエラーが出て困っています。 さっそくですがソースを張らせていただきます。 import java.io.*; import java.text.*; import java.util.*; public class Hallo { public static void main(String[] args) { File file = new File("C:\\Tomcat 6.0\\webapps\\blog","coment.txt"); FileOutputStream fos = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(fos , "Windows-31J"); BufferedWriter bw = new BufferedWriter(osw); String msg = "abc"; bw.write(msg); bw.close(); osw.close(); fos.close(); } } この様なソースを書いたところEclipseのエディタ上で 処理されない例外の型 FileNotFoundException 処理されない例外の型 UnsupportedEncodingException 処理されない例外の型 IOException などのエラーがMain分中のほとんどの行で出てしまいます。 しかし、このプログラムをサーブレットとして実装して動作させた場合には特に問題なく動きます。 個人的には開発環境からくるエラーか、それとも別の何か根本的な所で自分が間違っているのではないかと考えています。 みなさんのお返事お待ちしております。

    • ベストアンサー
    • Java
  • Javaで名前付きパイプ

    Windows上でJavaとFortranを使用し、プロセス間通信を行いと考えています。単純に思いついたのが名前付きパイプなのですが、Javaで名前付きパイプを生成する方法が解りません。 どなたかご存じないでしょうか? ちなみに、 try { // ファイルオブジェクトを生成する file.createNewFile(); FileOutputStream fileOutputStream = new FileOutputStream("\\\\.\\PIPE\\mypipe");<<ここでエラーになる。 OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); // ファイルに書き込む内容をセットする String outputdata = "TESTDATA";   <<< 以下省略 >>>> こんな感じで、試してみたのですが、ファイルの生成ができませんでした。 色々と調べてはいるのですが、どなたか成功した方いらっしゃいませんか?最悪はJNIを利用するしかないのかなぁ?

  • ファイル出力クラスの選択について(Java)

    少し長文になります。 Javaで、複数のオブジェクトに格納された文字列をループでgetして、 1つのファイル(test.txt)内に出力していくプログラムを作っています。 ファイル出力する際に使用可能なクラスがいくつもあるため、 どれを選択すればいいのか迷ってます。 以下の条件から、使用すべきクラスを教えて下さい! <ファイル出力の条件> ーーーーーーーーーーーーーー 1. ファイル(test.txt)は毎回新規で1ファイルのみ作成して、   そのファイル内にオブジェクトからループでgetした文字列を1行ずつ出力していく。   (次回実行の直前に、前回のtest.txtは手動削除する。) 2. test.txt内には日本語が出力される可能性があり、且つ、   test.txtをWindowsのアプリケーションで利用するため、   SJISにエンコードして出力する。   ※Javaの実行環境はLinux 3. バッファを使って出力する。 ーーーーーーーーーーーーーー 以上です。 私の考えでは、全てキャラクタストリームを使って、 ---------- FIleWriter fw = new FileWriter("test.txt",true);  OutputStreamWriter osw = new OutputStreamWriter(fw,"SJIS"); BufferedWriter bw = new BufferedWriter(osw); ---------- でいいのかなと思ったのですが、 ネットを見ていると ---------- FileOutputStream os = new FileOutputStream("output"); OutputStreamWriter osw = new OutputStreamWriter(os, "JIS"); BufferedWriter bw = new BufferedWriter(osw); PrintWriter pw = new PrintWriter(bw); ---------- という記述もあり、 わざわざキャラクタストリームとバイトストリーム(FileOutputStream)を混ぜて使っている意図もよく分かりません。 (文字列を扱うのに、バイトストリームを使う意味って無いですよね??) それから、私の例では FIleWriterインスタンス生成時の引数で"true"を指定して test.txtに"追記"するように設定してますが、 test.txt自体は毎回新規作成のものを使うので、この場合trueもfalseも不要でしょうか?? (→認識の確認として、 「trueやfalseはあくまで既存ファイルに対しての追記/上書きの設定であって、 ファイルをオープンしてクローズするまでの間はtrueなど設定しなくても ずっと末尾に追記されていく」という認識でOK?) また、true/falseが不要な場合、 FIleWriterは使わずに、 ---------- OutputStreamWriter osw = new OutputStreamWriter("test.txt","SJIS"); BufferedWriter bw = new BufferedWriter(osw); ---------- としても問題無いでしょうか?? 以上、分かる方、アドバイスください!

    • ベストアンサー
    • Java
  • ファイルの特定の位置への文字列の追加

    FilWriter fw = new FileWriter(file , true); BufferedWriter bw = new BufferedWriter(fw); bw.write("AAA"); bw.newLine(); 例えばこんなかんじで書いた場合、変数fileが参照するFileクラスのオブジェクトが表現するファイルの文末に AAA という文字列が追加されると思うのですが、 この文字列をファイルの中のある特定の位置に挿入するといった場合 どのような処理が可能でしょうか? RandamAccessFileクラスを使って、 正規表現で位置を確認して、 バイト単位で場所を指定して、 挿入する。 とかしか方法は無いのでしょうか? 何かアドバイスありましたらよろしくお願いいたします。

  • 半角カナが含まれる文字列をファイル出力

    いつもお世話になっております。 以下のようにしてテキストファイルを出力 していますが、半角カナの出力時に文字化けして しまいます。 ------------------------------------------ FileOutputStream os = new FileOutputStream("D:\\java_src\\test1.txt"); OutputStreamWriter osw = new OutputStreamWriter(os,"Shift_JIS"); BufferedWriter writer = new BufferedWriter(osw); writer.write("テキヨウ"); writer.close(); osw.close(); os.close(); ------------------------------------------ 出力されるテキストファイルは 文字コード:Shift_JIS 改行コード:CRLF としたいのですが何かいい方法はありますでしょうか? 動作環境は WindowsXP + JDK5.0 です。 すいませんが、宜しくお願いします。

  • javaで画像ファイルの入出力方法

    お世話になります、 画像ファイル(データ)をJavaアプリケーションで取り込んで別のディレクトリに同じ画像を複製する方法を探しています。 単なる画像ファイルのコピーではなく、Java側で画像データ(バイナリ)を取得して、新規に作成したファイル(Fileクラスで作成)にそのデータをWriteして複製する方法を探しています。 FileInputStreamやFileOutputStream等の方法で行ってみたのですが、微妙にデータが異なってしまって、画像が表示されません(画像ファイルを秀丸等で表示してデータを比較しました)。 以下にソースを貼り付けます。何か良い方法等ありましたらよろしくお願いします。 //画像ファイルのデータを読み込む CharArrayWriter caw = new CharArrayWriter(); Reader fr = new FileReader("D:\\image\\abcd.gif"); Reader in = new BufferedReader(fr); //新規にファイルを作成する File fil = new File("C:\\image\\abcd.gif"); fil.createNewFile(); FileOutputStream fo = new FileOutputStream(fil); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fo)); int count = 0; char[] buf = new char[16384]; while ((count=in.read(buf)) != -1) { if (count > 0) caw.write(buf, 0, count); } in.close(); //読み込んだ画像ファイルデータを作成したファイルに書き込む bw.write(caw.toCharArray()); よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのプログラムについて教えてください!

    BufferedWriterを使ってコマンドプロンプトから文字を入力して実行時に与えたパスのテキストに書き込んでいくプログラムをコーディングしてみたのですがなかなか上手くいきません。添削をお願いします。 import java.io.*; class BW{ public static void main(String[] args){ try{ File fl = new File("args[0]"); FileWriter fw = new FileWriter(fl); BufferedWriter bw = new BufferedWriter(fw); for(int i = 0;args[i]==null;i++){ bw.write(args[i]); bw.newLine(); } bw.flush(); bw.close(); }catch(IOException e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java

専門家に質問してみよう