• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FileWriterで8kb以上書き込むには?)

FileWriterで8kb以上書き込むには?

このQ&Aのポイント
  • java初心者の質問です。FileWriterで8kb以上ファイルに書き込めない場合、解決方法を教えてください。
  • java.sun.comのサイトのページFileWriterクラスによると、FileWriterで書き込めるサイズはデフォルトで決まっているため、自分で値を指定しない限りあるサイズ以上はファイルに書き込めません。
  • 解決方法は、FileOutputStream 上に OutputStreamWriter を構築し、指定した値を使ってFileWriterを初期化することです。具体的なソースコードは以下のようになります: FileOutputStream fos = new FileOutputStream("ファイルの絶対パス"); OutputStreamWriter osw = new OutputStreamWriter(fos); // 指定した値を使って初期化 FileWriter objFw = new FileWriter(osw);

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

  • ベストアンサー
noname#161640
noname#161640
回答No.2

掲載されたコードを一部修正して試してみましたが、全部書き出せましたよ。みたところ、BufferdWriterで書き出し後にflushしておらず、なおかつcloseしていませんでしたが、これが原因ではありあせんか? BufferedWriterはテキストをすぐに書き出さず、バッファに貯めてから書き出しますから、バッファに残っている分をflushし、ストリームをcloseしないまま終了しては、バッファに残った分はファイルに書き出されずに終わってしまいます。BufferedReaderをcloseする手前に、BufferedWriterをflushしcloseする文を追記して試してみてください。

20081217
質問者

お礼

うまくファイルに書き込めていました! 長い時間悩んだんでホント有難うございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#161640
noname#161640
回答No.1

>FileWriterで書き込めるサイズはデフォルトで決まっているため、自分で値を指定しない限りあるサイズ以上はファイルに書き込めないそうですが、 ??? 長年、Javaを使っていますが、そんな話は初耳です。 まさかと思って、さきほど、300KBほどのStringをFileWriterで書きだしてみましたが、何の問題もなく動きました。なにか勘違いしていませんか?? あるいは、もし実際に8KB以上書き出せなかったというなら、そのソースコードを掲載していただけますか。

20081217
質問者

補足

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.lang.String; import java.lang.System; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; public class urlsort { public void M_urlsort(String[] A00) { String C00=null; String C01=null; String C02=null; C00=A00[0];//url C01=A00[1];//正規表現の設定 C02=A00[2];//ファイルのパス Matcher L05=null; System.out.printf("[%s]から、URLを検索...%n", C00); int L00 = 0; try { URL L01 = new URL(C00); BufferedReader L02 = new BufferedReader(new InputStreamReader( L01.openStream())); String L03; //文字化けする場合はcompileの引数にPattern.UNICODE_CASEも追加 Pattern L04 = Pattern.compile(C01, Pattern.CASE_INSENSITIVE); FileWriter objFw; objFw = new FileWriter(C02); BufferedWriter objBw = new BufferedWriter(objFw); while ((L03 = L02.readLine()) != null) { L05 = L04.matcher(L03); while (L05.find()) { L00++; objBw.write(L05.group(1) + "\n"); } } L02.close(); } catch (IOException L06) { System.out.println("ページ読み込み中にエラーが起きました。"); } System.out.println(L00 + "件のURLを発見しました。"); } } コンソールに表示された文字は... [http://tweetmeme.com/]から、URLを検索... 231件のURLを発見しました。 231件のURLをカウントしているにもかかわらず、ファイルには他のurlで何度やっても8.0 KB (8192 バイト)分のurlしか書き込まれていませんでした。ファイルに書き込まれた最後のurlは途中で途切れています。 書き忘れていましたがOSはLinuxのUbuntu i836です。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Javaの公式メソッドの中身を見るには?

    Javaの公式なメソッドやクラスの中身を見るにはどうすればいいでしょうか? jTextAreaクラスに、指定した位置に文字列を挿入する、 「insertメソッド」というメソッドがあるのですが、 このメソッドがどういうアルゴリズムかを勉強したいのですが、 JavaのAPIを見ても、引数や説明があるだけで、中のソースがありません。 http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/JTextArea.html#insert%28java.lang.String,%20int%29 何か中身を見る方法ありませんか?

    • ベストアンサー
    • 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
  • javaインストールにつきまして

     質問させていただきます.どうぞよろしくお願いいたします.  環境:Win7 64bit になります。  今ネットから落としてきたjavaのソースコードファイル(.java)を コンパイルしてみたいのですが、CとVB(両方共ちょっとだけです)しか 経験がなく、やり方が分かりません。。 検索しておりまして、 http://java.sun.com/j2se/1.5.0/ja/download.html のどれかをDLする(?)のかなと思うのですが、 試しに「JDK 5.0 Update 22」を DL→インストール→再起動といたしまして、 CMDで「java sample.java」や「javac sample.java」と打ちましても 「’java’は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示されてしまいます。  もしお詳しい方がいらっしゃいましたら,お教えいただきたく どうぞよろしくお願いいたします。

    • ベストアンサー
    • 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でのShift-JISとEUC-JP間の文字コード変換ができません

    Windows環境で作成した「Shift-JIS(CP932)」のファイルを、 JAVAを使用して「EUC-JP」のファイルに変換したいのですが、 NEC選定文字(13区)等の追加された機種依存文字の変換ができません。 いろいろ調べてみたのですが、 文字コードの呼び方がサイトによってあいまいで、 どのページが正しいのかがわかりません。 ・「Shift-JIS(CP932)」「EUC-JP」の正確な情報が記述されたサイト ・JAVAにおける文字コードの変換のノウハウ に関しての知識をお持ちの方がいましたら、教えてください。 以下は変換に使用したJAVAのソースコードです。 InputStreamReader ins = new InputStreamReader(new FileInputStream(iFile), "windows-31j"); OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream(oFile), "euc-jp"); int c; while ((c = in.read()) != -1) { out.write(c); } 以上です。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JDK1.5のjava.math.BigDecimal#toString

    JDK1.5のjava.math.BigDecimal#toStringについて教えて下さい。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/math/BigDecimal.html#toString() SunにDocumentがありますが、この説明にある「調整された指数」の算出の仕方がよくわからないので、どういうときに指数表示されるのかが分かりません。 例を示してわかりやすく説明していただけるとありがたいです。

  • Java ソフトウェアがダウンロードできなくて困っています!

    http://www.sun.com/で、ダウンロード デスクトップ用 Java ソフトウェア Java Runtime Environment バージョン 5.0 (ファイルサイズ: 94 KB) のダウンロードを選択しました。という画面で 「ダウンロードの開始」 をクリックすると、 画面自体が落ちてしまいます。 一体何故なのでしょうか? 解決方法を教えて下さい!

  • KB3185330かKB3192391のどっち??

    先ほど質問を投稿しましたが、しなおしました。先ほどのは削除済です。 KB3185330には今月のセキュリティ更新だけではなく、9月のKB3185278も付いてくるらしく??私は非表示にしています。 Windows Update カタログのKB3192391というのが、KB3185330の10月分のセキュリティ更新だけらしい?(苦笑)です。 http://blog.livedoor.jp/nichepcgamer/archives/1061666005.html このページのKB3192391の「ファイル直リンク 32bit」をクリックすると 「オブジェクトはadd Event Listenerプロパティまたはメゾットをサポートしていません」 と出ました!! *大丈夫なのでしょうか??どういう意味なのでしょうか? https://support.microsoft.com/ja-jp/kb/323166 このページの「Windows Update カタログにアクセスするには、以下のマイクロソフト Web サイトにアクセスします。」をクリックしても、下のほうに(プライバシー 使用条件 ペルプ)とクリックできるのはこの3つだけで・・・青いページが開くだけです。 *どうしたらKB3192391をインストールする画面にいけるのでしょうか?? 先ほどの質問(上の2つ?)後「ダウンロードセンター」で検索し https://www.microsoft.com/ja-jp/download/details.aspx?id=53995 を見つけました。 私はWindows7の32bitで、こちらで大丈夫でしょうか? 来月からも同じ悩みが出て来そう・・・ですよね?だとしたらもうそのままKB3185330を入れるべきか?KB3192391を入れるか・・・悩んでいます!! KB3185330には問題は無いのですよね??自分で決める事なのでしょうが・・・ 皆様はどうされているのでしょうか?? 「よろしく、お願いします!!」

  • ファイル操作時のclose処理の失敗とは?

    ファイル操作時のclose処理の失敗とは? とりあえず具体的な例を挙げますとFileOutputStreamのclose時。 このときに発生する例外とはどんなケースだろう、 例外が発生したときにはどんな対処をすべきだろうと考えましたが、 発生しうるケースが分かりませんでしたし、 catchに記述すべき処理がわかりませんでした。 JavaDocには以下のように記述されています。 「IOException - 入出力エラーが発生した場合」 意味が分かりません…。考えるのが面倒なので手抜を抜いた感があります。 FileOutputStream (Java 2 プラットフォーム SE v1.4.0) http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileOutputStream.html FileOutputStream (Java 2 Platform SE 5.0) http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/FileOutputStream.html FileOutputStream (Java Platform SE 6) http://java.sun.com/javase/ja/6/docs/ja/api/java/io/FileOutputStream.html バッファ書込みをするクラスの場合には、ディスクの容量が足りなくて close処理時に書込みが失敗して例外発生、ということは 十分にありうると思います。しかしFileOutputStreamでは関係ありません。 デバッガで、途中で処理を止めclose前に処理を終了させてしまっても 問題は生じませんでした(WindowsXP上では)。 質問は以下です。 ・ファイル出力処理のclose時に例外が発生するのはどのような環境・ケースか ・例外が発生した場合にはどんな処理をすべきか(ログ出力以外で) よろしくお願いします。

    • ベストアンサー
    • Java
  • JavaのFileWriterについて

    はじめまして。 以下のようなプログラムで、new FileWriter("test1.txt")の【test1.txt】が最終的にどの親クラスのコンストラクタ(メソッド?)に渡されて処理されるのかがわかりません。 new演算子で FileWriterオブジェクトを作成した際に、importした親クラスのFileWriterクラスにあるコンストラクタが呼び出されるのだろうとは思っています。 そこで、JavaのAPIのサイトにて、クラス FileWriterの説明(http://docs.oracle.com/javase/jp/6/api/)を読みましたが、コンストラクタが複数紹介されており、下記のプログラムに当てはまるものがどれか分かりませんでした。 また、クラス FileWriterの説明ページのコンストラクタの概要にあるpublic FileWriter(File file)というコンストラクタの場合、引数リストのFileにもリンクがあり、Fileのリンク先のページであるクラス Fileの説明(http://docs.oracle.com/javase/jp/6/api/)を読みましたが、結局test1.txtがどのクラスのコンストラクタ(メソッド?)でどのように処理されているのかが分かりません。 どうかご教示いただきたく、よろしくお願い致します。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Sample7 { public static void main(String[] args){ PrintWriter pw = null; try{ pw = new PrintWriter (new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!"); pw.println("GoodBye"); System.out.println("ファイルに書き込みました。"); }catch(IOException e){ System.out.println("入出力エラーです。"); }finally{ if(pw != null){ pw.close(); } } } }

    • ベストアンサー
    • Java