• ベストアンサー

javaプログラミングでの文字化けの対処方法

javaのソースを作成していて、 BufferedWriter bw = new BufferedWriter(new FileWriter(args[1])); のようにし、ファイル出力ストリームを取得しarg[1](テキストファイル)に bw.write(num); のようにしてint型の変数をファイルに書き込むようにしましたが、 できあがったテキストファイルを開いてみると文字化けしていました。 これを文字化けさせずにファイルに書き込む方法はありますでしょうか? よろしくお願いします。

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

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

  • ベストアンサー
回答No.1

文字化けしているわけではありません。write(int)の動作があなたが考えているものと違う動作をしているだけです。 たぶん数字の1を書きたいときに int num=1; として bw.write(num); をやっていませんか??これでは数字の'1'を書き込むことはできないのです。正解は int num='1'; とします。System.out.println(num);するとわかりますが、数値にするとnum=49です。 write(String)を使う方がわかりやすいと思うので、 bw.write(Integer.toString(num)); と書くことをお勧めします。 ちなみに、ArrayListをString配列に変換するには ArrayList al; String str2[]=new String[al.size()]; for(int i=0;i<al.size();i++) { str2[i]=al.get(i).toString(); } とします。Javaでの常套手段なので覚えていて損はないと思います。

kanari501
質問者

お礼

前回の質問に引き続きご回答ありがとうございます! C言語のように単にint型の変数を入れても無理なんですね^^; おかげさまでファイルにうまく書き込むことができました!! なるほど!!ArrayListをString配列の格納する方法も教えて くださりありがとうございました★

関連するQ&A

  • 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
  • javaプログラミング

    javaとYahooのWebサービスを利用して、検索結果のxmlを取り出し、 ○○.xmlという引数を与えて、結果を書き出そうとしていますが、 以下のプログラムだと文字(日本語)が化けてしまいます。 どうにかして文字化けせず取り出すことはできないでしょうか。 よろしくおねがいします。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.InputStream; import java.net.URL; public class YahooWebServiceExample { public static void main(String[] args) { String request = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch? appid=web_research&query=%e6%b2%96%e7%b8%84&results=2"; try { // ファイル出力ストリームを取得(第二引数) BufferedWriter bw = new BufferedWriter(new FileWriter(args[0])); URL url = new URL(request); InputStream in = url.openStream(); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { for (int i = 0; i < len; i++) { System.out.print((char) buf[i]); bw.write(buf[i]); } } in.close(); bw.close(); } catch (Exception e) { System.out.println("Web services request failed"); } } }

    • ベストアンサー
    • Java
  • 文字化けをなおしたいです。

    下記のようなプログラムで、文字をテキストに出力しているのですが、文字化けしてしまう文字があります。 どのように対処すればよろしいのか教えていただけないでしょうか。(ソース中の(文字化けのする文字)には、例えば、はしごたかの高などです。) 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
  • javaプログラム初心者です。

    入力ファイルの内容をWebサーバプログラムへ送信し、サーバからの応答を別ファイルに出力するクライアントプログラムを作っているのですが、出力ファイルにはなにも書き込みがされていません。(サーバからの応答は事前に不明でその長さが可変長である) 以下が作ったプログラムです。間違っているところを詳しくご指摘いただけるとありがたいです。お願いします。 import java.net.*; import java.io.*; public class client{ static final int BUFSIZE = 1792; public static void main(String[] args){ try{ String server = args[0]; //接続先のIPアドレス File file1 = new File(args[1]); //入力ファイル(HTTPリクエスト) FileReader filereader = new FileReader(file1); BufferedReader br = new BufferedReader(filereader); int serverport = Integer.parseInt(args[2]); //ポート番号 File file2 = new File(args[3]); //サーバからの応答をファイルに書き込む用 FileWriter filewriter = new FileWriter(file2); BufferedWriter bw = new BufferedWriter(filewriter); byte[] bytebuffer = new byte[BUFSIZE]; String str; while((str = br.readLine()) != null){ //入力ファイルの内容を1行ずつ読み込む bytebuffer = str.getBytes(); //入力ファイルの文字列をバイトに変換 } Socket socket = new Socket(server,serverport); //ソケットの生成 System.out.println("Connected to server...sending echo string"); InputStream in = socket.getInputStream(); //入出力ストリームの取得 OutputStream out = socket.getOutputStream(); out.write(bytebuffer); //文字列を送信 int receive; while((receive = in.read(bytebuffer))!=-1){ bw.write(new String(bytebuffer)); //サーバからの応答をファイルに出力 } bw.close(); socket.close(); }catch(IOException e){ } } }

  • javaの文字化け

    自分はプログラミング初心者です。以下のようなプログラムで新しいメモ帳ファイルに数字を出力しようとすると文字化けしてしまいます。どうすれば文字化けを直せるのでしょうか? よろしくお願いします。 import java.io.*; class Number { public static void main(String args[]) { try { FileOutputStream fos = new FileOutputStream(args[0]); DataOutputStream dos = new DataOutputStream(fos); int count = 0; int j = 1; do { dos.writeShort(j); j += 3; } while(++count < 15); fos.close(); } catch(Exception e) { System.out.println("Exception: " + e); } } }

    • ベストアンサー
    • Java
  • ログファイルの文字化け

    以前、ここでログ部品の作り方を教えていただきました。 ありがとうございます。 サーバーは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
  • ファイルの特定の位置への文字列の追加

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

  • Double,Longをファイルに書き込み

    以下のように、Double,Longをファイルに書き込もうとした場合、どのようにキャストをすればよろしいのでしょうか? (String)でString型への変換や Integer.parseInt等を試したのですが、できませんでした。よろしくお願いします。 import java.io.*; class test { public static void main(String[] args) { double dNumber = 3.45; long lNumber = 12345; BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt")); bw.write(dNumber); bw.write(lNumber); } //end main } //end class

    • ベストアンサー
    • Java
  • ファイル出力クラスの選択について(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
  • handleText()で取得したテキストが文字化けしてしまいます。

    タイトルの通りです。入出力について一応自分なりに調べてみましたが、出力したファイルへの文字化けが直りません。下にコードを書いています。 どうかよろしくお願いします。 import java.io.*; import java.net.*; import javax.swing.text.MutableAttributeSet; import javax.swing.text.html.*; import javax.swing.text.html.parser.ParserDelegator; class MyParserCallback extends HTMLEditorKit.ParserCallback { String[] text = new String[1000]; int k=0; public void handleText(char[] data, int pos) { text[k] = new String(data); k++; } } public class test { String[] line = new String[10000]; public test() { try { URL url = new URL("http://www.goo.ne.jp/"); HttpURLConnection uc = (HttpURLConnection) url.openConnection(); uc.setUseCaches(false); BufferedReader br = new BufferedReader(new InputStreamReader(uc .getInputStream())); BufferedWriter bout = new BufferedWriter(new FileWriter("test.txt")); MyParserCallback cb = new MyParserCallback(); ParserDelegator pd = new ParserDelegator(); pd.parse(br, cb, true); for(int i=0; i<cb.text.length; i++) { if(cb.text[i] == null) { continue; } bout.write(cb.text[i]); bout.newLine(); } //終了処理 br.close(); bout.close(); } catch (MalformedURLException e) { System.out.println(e); } catch (IOException e) { System.out.println(e); } } public static void main(String[] args) { test t = new test(); } }

    • ベストアンサー
    • Java

専門家に質問してみよう