- ベストアンサー
FileWriterで8kb以上書き込むには?
- 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);
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
掲載されたコードを一部修正して試してみましたが、全部書き出せましたよ。みたところ、BufferdWriterで書き出し後にflushしておらず、なおかつcloseしていませんでしたが、これが原因ではありあせんか? BufferedWriterはテキストをすぐに書き出さず、バッファに貯めてから書き出しますから、バッファに残っている分をflushし、ストリームをcloseしないまま終了しては、バッファに残った分はファイルに書き出されずに終わってしまいます。BufferedReaderをcloseする手前に、BufferedWriterをflushしcloseする文を追記して試してみてください。
その他の回答 (1)
>FileWriterで書き込めるサイズはデフォルトで決まっているため、自分で値を指定しない限りあるサイズ以上はファイルに書き込めないそうですが、 ??? 長年、Javaを使っていますが、そんな話は初耳です。 まさかと思って、さきほど、300KBほどのStringをFileWriterで書きだしてみましたが、何の問題もなく動きました。なにか勘違いしていませんか?? あるいは、もし実際に8KB以上書き出せなかったというなら、そのソースコードを掲載していただけますか。
補足
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です。 よろしくお願いします。
お礼
うまくファイルに書き込めていました! 長い時間悩んだんでホント有難うございました!