• ベストアンサー

ファイル出力について。

こんにちわ。 String型配列に格納した文字列5つを、それぞれ改行し、 ファイルに出力したいのですが、やり方がわかりません。 例: String[] test = new String{"a","b","c","d","e"}の場合 ↓test.txtの内容 --------- a b c d e --------- わかる方いらっしゃいましたら、ご教授願います。 宜しくお願いします。

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

  • ベストアンサー
  • siina-k
  • ベストアンサー率82% (14/17)
回答No.5

No2です。 こういうことでよろしいですか? import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; public class test2 { public static void main(String[] args) { String[] test = { "a", "b", "c", "d", "e" }; try { File file = new File("C:\\test.txt"); Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); for (int i = 0; i < test.length; i++) { test[i] = test[i] + "\n"; out.write(test[i], 0, test[i].length()); } out.close(); } catch (IOException e) { System.out.println(e); } } }

marimo-
質問者

お礼

回答ありがとうございます。 そういうことです!!!! 説明が下手ですいませんでした。 実際のソースで確かめてみます。 ありがとうございました。

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

その他の回答 (4)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.4

文字エンコードを指定するにはava.io.OutputStreamWriterを使います。 java.io.Writer out = new java.io.BufferedWriter(new java.io.OutputStreamWriter(new java.io.FileOutputStream("filename"), "UTF-8")); といった感じでWriterを作成して書き込みます。

marimo-
質問者

補足

回答ありがとうございます。 これで出力ファイルの文字コードの指定が出来そうです。。。 が、ストリームに書き込むのはどうしたらよいのでしょうか。 ファイルからではなく、string型の文字列を書き込みたいのです。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.3

PrintWriterを使うとこうなります。 import java.io.*; class HelloWriter { public static void main(String args[]){ String[] test={"a","b","c","d","e"}; try{ PrintWriter writer= new PrintWriter(new BufferedWriter(new FileWriter("test.txt"))); for(int i=0;i<test.length;i++){ writer.println(test[i]); } writer.close(); } catch(IOException e){ System.out.println(e); } }

marimo-
質問者

補足

回答ありがとうございます。 質問に書き忘れたのですが、String型の文字列はUTF-8で、 出力もUTF-8でファイルに書き込みをしたいと思っています。 そのため、PrintWriterクラスでは、文字コードの指定が 出来ませんでした。 他によい方法はないでしょうか。 宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • siina-k
  • ベストアンサー率82% (14/17)
回答No.2

こんにちわ。 何処がわからないのでしょうか? 改行するやり方がわからないのであれば、"\n"をつければ、改行されますよ。 一応簡単にソースを作ってみましたので、ご参照ください。 import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class test2 { public static void main(String[] args) { String[] test = { "a", "b", "c", "d", "e" }; try { File file = new File("C:\\test.txt"); FileWriter filewriter = new FileWriter(file); BufferedWriter writer = new BufferedWriter(filewriter); for (int i = 0; i < test.length; i++) { test[i] = test[i] + "\n"; writer.write(test[i], 0, test[i].length()); } writer.close(); } catch (IOException e) { System.out.println(e); } } }

marimo-
質問者

補足

回答ありがとうございます。 質問に書き忘れたのですが、String型の文字列はUTF-8で、 出力もUTF-8でファイルに書き込みをしたいと思っています。 そのため、PrintWriterクラスでは、文字コードの指定が 出来ませんでした。 他によい方法はないでしょうか。 宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • tom11
  • ベストアンサー率53% (134/251)
回答No.1

こんにちは、 PrintWriterクラス を利用すると便利ですよ。 参考URLを参照してみてください。

参考URL:
http://takeoba.cool.ne.jp/java/PrintWriter.htm
marimo-
質問者

補足

回答ありがとうございます。 質問に書き忘れたのですが、String型の文字列はUTF-8で、 出力もUTF-8でファイルに書き込みをしたいと思っています。 そのため、PrintWriterクラスでは、文字コードの指定が 出来ませんでした。 他によい方法はないでしょうか。 宜しくお願いします。

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

関連するQ&A

  • ファイルからの読み込みについて

    スペースで区切られた数字列を3つずつ取り、3つ目の数字列の最後の数字が奇数ならば1を、偶数ならば2を配列に格納するプログラムを作っているのですが、 具体例 203 255 254 203 255 255 203 255 254 203 255 254 203 255 254 203 255 255 203 255 255 203 255 255 203 255 254 203 255 255 とあれば、2,1,2,2,2,1,1,1,2,1と順に格納する プログラムの実行がうまくいかず悩んでいます。 関係する部分を書き出すと b = 0; n = 0; m = 0; while(1){ data = fgetc(fi); if(data == EOF) break; a[n] = data; if(' ' == a[n]){ b++; } if(b == 3){ b = 0; t = a[n-1]; n = 0; if(t == '1'|| t == '3' ||t == '5' || t == '7'|| t == '9'){ c[m] = 1; } else{ c[m] = 2; } m++; } else n++; } となっているのですが、上に書いた数字列をfiに読み込んで実行し、配列cを出力してみたところ 2122222222となっていました。 改行前は正確に出力されているので、改行する部分でなにか不都合が起こっているのかなと思い、いろいろ考えたのですが解決しません。 どなたかよろしくお願いします。

  • Perl テキスト内の文字列 合計値

    ご教示お願い致します。 test.txt --------------- a,a,a c,b,b b,c,b a,a,d a,e,e --------------- ↑のようなテキストがあり それを 1列目[0] a = 3 b = 1 c = 1 d = 0 e = 0 2列目[1] a = 2 b = 1 c = 1 d = 0 e = 1 3列目[2] a = 1 b = 2 c = 0 d = 1 e = 1 このように求めたいのと、 全ての配列から a = 6 b = 4 c = 2 d = 1 e = 2 という風に求めたいのですが、どのようにするのでしょうか?

  • EXCELVBAでファイルにあるデータをtxtファイルに出力しようと考えています。

    EXCELVBAでファイルにあるデータを txtファイルに出力しようと考えています。 txtファイルに出力することはできましたが、 エクセルのデータを参照しません。 どうすればいいのでしょうか。 よろしくおねがいします。 ********************************** 作成したVBA ********************************** Sub test_Click() Dim fNAME As String 'ファイル名格納用 fNAME = "c:\test.txt" Open fNAME For Output As #1 **************************************************** ここにB1からB10までの値をいれようと考えています。 ループのさせ方もよくわかりません。 **************************************************** Print #1, "test1=" & Range("B1").Select & " Print #1, "test2=" & Range("B2").Select & " … Print #1, "test10=" & Range("B10").Select & " Close #1 End Sub

  • ファイル読み込み処理  ???

    1,a,aa,12 2,b,bb,13 3,c,cc,14 4,d,dd,15 5,e,ee,ff 上のようなファイル内容を 読み込込んで 1,a,aa,12 2,b,bb,13 3,c,cc,14 4,d,dd,15 5,e,ee,ff  ように表示したいです。 4行目が空欄ですので4行目を飛ばして読み込んで表じしたいです。 どこを修正すればいいですか? #include <stdio.h> #include <string.h> int main(void) { FILE *fp1; char string[128]; /* 文字列を読み込む配列 */ /* ファイルを開けなかったら */ if ((fp1 = fopen("test.txt", "r")) == NULL) { fprintf(stderr, "ファイルを開けません!\n"); return -1; } /* ファイルから失敗するまで行単位で文字を読み込み */ while ((fgets(string, 128, fp1)) != NULL) { string[strlen(string) - 1] = '\0'; /* 余分な改行コードを削除 */ puts(string); /*読み込んだ行を表示 */ } fclose(fp1); /* ファイルを閉じる */ }

  • ファイル出力時の

    以下のソースでファイル出力するのですが、 BufferedReader br = new BufferedReader(new FileReader(new File(args[0]))); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(args[1]))); //一行読み込みを行った文字列を格納 String line; //一行読み込み while((line = br.readLine()) != null){ //一行書き込み pw.write(line); System.out.println(line); } コンソールへの出力は正常に出力されるのですが、 ファイルへの出力は改行されずに一行で出力されてしまいます。 どうすればファイル出力も正常になるか教えてください。

  • 配列のソートと削除

    String型のstrToRemoveで与えられた文字列を配列から探し、あればそれ以降の配列の数字をすべて左にシフトします。 なので配列の大きさは1小さくなります。その結果の配列をreturnで返します。 例) ({"A","B","C","D","B"}, "B")配列1にBがあるのでそれ以降の文字列をすべて左にシフト→ {"A","C","D","B"} ({"A","B","C","D","B"}, "A") 配列0にAがあるのでそれ以降の文字列を左にシフト→ {"B","C","D","B"} プログラムは以下のように組みました。 public class ArrayFun { public String[] oneRemoved(String[] array, String strToRemove) { int count = 0; for (int i = 0; i < array.length; i++) {      if (strToRemove.equals(array[i]) && count == 0) {        for (int j = i; j < array.length - 1; j++) {          array[j] = array[j + 1];        }          count++;      } }      array = new String[array.length - 1];      array[array.length - 1] = null;      return array; } } ちなみにcountは、一度シフトすればもう同じ文字列がそれ以降の配列にあってもシフトはしないので、countでシフトしたかどうかを判断しようと思い付けました。 これでテストメソッドも作るのですが、 import static org.junit.Assert.*; import org.junit.Test; public class ArrayFunTest { @Test public void testoneRemoved() { ArrayFun af = new ArrayFun(); String[] a1 = {"A","B","C","D","B" };//元の配列 String[] a2 = {"A","BB","CCC","DDD","B"};//元の配列 String[] a3 = {"B","C","D","B"};//シフト後の配列 String[] a4 = {"A","BB","CCC","DDD","B"};//シフト後の配列 assertEquals(a3, af.oneRemoved(a1, "A")); assertEquals(a4, af.oneRemoved(a2, "NotHere")); } } 以上のように組むと、assertEqualsの真ん中に黒線が入って自動的に@SuppressWarnings("deprecation")が加えられてしまいます。 実行結果は、({"A","B","C","D","B"}, "A") の例だと、配列0にB が入るはずがnullになっている、とエラーがでます。 どのようにしたら正常に動かせるでしょうか?宜しくお願いします。

    • ベストアンサー
    • Java
  • C++のファイルに対する配列データの読み書き

    C++で配列c[0],c[1],....の値をファイルに出力すると、 1.2 3.2 5.1 8.2 -9.1 のようになると思います(この例は配列のサイズが5)。実際は100以上の配列にします。 プログラム的にはだいたい下のようになると思っています。 std::ofstream ofs( "test.txt" ); ofs << ここで並びの出力をするはず? << std::endl; 意味は、出力ファイルの定義とストリームによる書き出し?と改行だと思います。 並びの出力ですから、ループでよいのでしょうか。プログラム作法が分からないので教えて頂きたいのですが。データの区切りは空白で、できれば書く数値のフォーマットは揃えたいですが。 次に、読み込むときはどうなるでしょうか。 std::ifstream ifs( "test.txt" ); std::string str; ifs >> str; std::cout << str << std::endl; これだと読んだデータを画面表示して終わりです。配列に読み込む方法なのですが。 よろしくお願いします。

  • ファイルの読み込み、配列に格納

    お世話になります。Java初心者です Javaプログラムを実行する同じディレクトリにあるテキストファイルとデータファイルをコマンドラインで同時に読み込み それぞれ違う配列に格納したいのですが、1つのファイルの読み込みは出来ても2つ同時の読み込みと配列格納でつまづいています。 読み込むテキストファイルには以下のような1行の文が、 Dr. Fujita is great! 読み込むデータファイルには以下のような文字が書かれています。 AC 4C 7C 10C KC 3D 6D 9D QD JB 3C 6C 9C QC 2D 5D 8D JD JA 2C 5C 8C JC AD 4D 7D 10D KD 配列に格納する際、テキストファイルの場合は全て大文字にし、アルファベット以外の記号(スペース含)は全て消して配列に格納します。 上の例でいえばこのような状態で格納です↓ DRFUJITAISGREAT データファイルの場合は、2組1文字をそのまま配列に格納です。ただしスペースは飛ばします。 上の例でいえば、ACを配列0に、4Cを配列1に、7Cを配列2に、、、と格納していきます。 import java.io.*; public class sample{ public static void main(String[] args){ try{ FileReader f = new FileReader(args[0]); BufferedReader b = new BufferedReader(f); Strings; while((s=b.readLine())!=null){ System.out.println(s); ←読み込んでるか確認 } }catch(Exception e){ System.out.println(no file); } } } ファイルの指定は実行時に、java sample datafile.dat textfile.txt と指定します。 読み込むプログラムは以上のように書いたのですが、2つファイルを読み込むにはどのように記述したらよいのでしょうか。 FileReaderを2つ作成?しても最初に指定したデータファイルの内容がまた読み込まれるだけで・・・ 読み込んだら変数sに入りますが、たとえばs.substring()なんかでわけて配列に入れようとしても、s.substring()←ここでエラーが出てしまいます。 あと、Dr. Fujita is great!のアルファベットを大文字にし、記号(スペース含)を飛ばして格納するにはどうしたらよいのでしょうか。 宜しくお願いします

    • ベストアンサー
    • Java
  • batファイルについて教えてください

    以下の要件を満たすbatファイルを作成したいと思います。 ・5区切りのCSVファルイを以下のように変数に代入する  読み込みファイル例 列 a , b , c , d , e 111,222,333,444,555 111,222,222,666,777 111,111,123,888,999 行全体を%%a、c列を%%c e列を%%eへ代入 a,b,c,d,e ⇒ %%a c ⇒ %%c e ⇒ %%e ・%%cに3を含むものを確認したい ・if文を使用に3を含むものを処理対象にしたい ・3を含むものに処理を行った後それぞれ以下のようにファイル書き出しを実施したい。     %%a ⇒ zenbun.txt %%c + %%e ⇒ bassui.txt ・処理終了 forやifを使うんだろうなぁ、、程度しかわからず全く詳細な構成がわかりません。 どなたか教えていただけませんでしょうか? よろしくお願いします。

  • Excelファイルの取込およびテキストファイルへの出力

    はじめて質問させて頂きます。yu_ki0223と申します。 Excel2000のVBAにて、以下のような事をしたいと考えています。 参考となるようなホームページもしくはサンプルプログラム等ありましたら お教えいただきたく宜しくお願い致します。 ■質問 あるExcelの表を取込み、判断対象となる列Aの値が「判断対象1」だった場合、 「判断対象1」に連動する列Bの値をテキストファイルに出力し、改行する。 また、列Aの値が「判断対象3」の場合のみ、列Bの値を返さず『テスト3』と 別の文字を出力し、改行する。 【列Aの値】 ・判断対象1 ・判断対象2 ・判断対象3 【列Bの値】 ・TEST1 ・TEST2 ・TEST3