• 締切済み

ファイル操作 ファイルにTABを入れる

ファイルの入出力をやっています。一文字を読み込んだ後にOUTPUTファイルにカンマの代わりにTABキーを入れ込みたいのですが、それがどうしてもうまくいきません・・・ public class FileRead { // ファイル名 private static final String INFILE_NAME = "input01.csv"; private static final String OUTFILE_NAME = "output01.tsv"; public static void main(String[] args) { // FileReaderクラス宣言 BufferedReader fr = null; FileWriter fos = null; try { // FileReaderクラス生成 fr = new BufferedReader(new FileReader(INFILE_NAME)); fos = new FileWriter(OUTFILE_NAME); // 読み込み int i; while ((i = fr.read()) != -1) { //System.out.print((char)i); //char chra=(char)i; fos.write(i); } System.out.println("--- 読み込み完了 ---"); } catch (IOException e) { System.out.println("Exception : " + e); } finally { try { // FileReaderクラスを閉じる 続く・・・ 教えてください!!

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

みんなの回答

  • jun-1
  • ベストアンサー率29% (18/61)
回答No.1

','の代わりに'\t'ではだめですか?

atl30319
質問者

お礼

難しく考えすぎていたようです。 自分で解決できました!! ありがとうございます。

関連するQ&A

  • java ファイル操作

    現在javaでファイル操作しファイルの文字列を検索したりファイルに文字列を追加したりする ものを作成しています。 現状のコードはこのような感じです。 class addresskensaku{ public static void main(String[] args)throws IOException{ System.out.println("数字を選択\n1.名前で検索\n2.年齢で検索\n3.出身地で検索\n4.追加"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //1が選択された場合 if(res == '1' || res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 System.out.println("検索結果 :"); while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[0].indexOf(str1) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2' || res == '2'){ System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String ol = o.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp =null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //完全一致 if (ol.equals(words[1])){ // System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //3が入力された場合 if(res == '3' || res == '3'){ System.out.println("出身地を入力してください。"); BufferedReader p = new BufferedReader(new InputStreamReader(System.in)); String pref = p.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[2].indexOf(pref) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //4が入力された場合 追加 if(res == '4' || res == '4'){ //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader n = new BufferedReader(new InputStreamReader(System.in)); String str2 = n.readLine(); //年齢入力 System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String str3 = o.readLine(); //住所入力 System.out.println("住所を入力してください。"); BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); String str4 = a.readLine(); //ファイルに書き込み try{ File file = new File("addressdata.txt"); FileWriter filewriter = new FileWriter(file, true); filewriter.write(str2+","+str3+","+str4+"\r\n"); filewriter.close(); }catch(IOException e){ System.out.println("e"); } } } } これをカプセル化し 各機能ごとにメソッドを分けて作ろうかなと思っています。 結果の出力はmainでやる予定です。

  • CSVファイルを二次元配列に格納するプログラム

    整数のCSVファイルを読み込んで、int型の二次元配列に格納するプログラムを作成中なのですが どうもうまくいきません。 String Str = ""; try { File inFile = new File("./res/test.csv"); FileReader fr = new FileReader(inFile); BufferedReader br = new BufferedReader(fr); ArrayList<String[]> al = new ArrayList<String[]>(); while (br.ready()) { Str = br.readLine(); al.add(Str.split(",")); } int[][] im = new int[al.size()][]; for (int i = 0; i < al.size(); i++) { im[i] = (int)al.get(i); // ここでエラー } br.close(); fr.close(); } catch (Exception e) { System.out.println("ファイル読み込みに関するエラー"); } 他にいい方法ありませんか? また逆で、int型配列に格納されているデータをCSVファイルとして出力する方法もお願いします

  • javaでファイル操作し検索するものを作ってます

    目的はテキストファイル内の文字列に検索をかけヒットしたものを表示する というものです import java.io.*; class kensakuTest{ public static void main(String[] args)throws IOException{ System.out.println("検索方法を選択してください。\n0:学籍番号で検索\n1:名前で検索\n2:出身地で検索"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //0が選択された場合 if(res == '0'){ System.out.println("学籍番号を入力してください。"); BufferedReader bn = new BufferedReader(new InputStreamReader(System.in)); String str0 = fn.readLine(); char num = str0.charAt(0); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; while((tmp=breader.readLine())!=null){ //完全一致 if(){ System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //1が選択された場合 if(res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); char name = str1.charAt(0); try{ FileReader freader = new FileReader("data.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 //部分一致 while((tmp=breader.readLine())!=null){ if(tmp.indexOf(str1) > -1){ System.out.println("結果は:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2'){ System.out.println("出身地を入力してください。"); BufferedReader bl = new BufferedReader(new InputStreamReader(System.in)); String belong = bl.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; while((tmp=breader.readLine())!=null){ //完全一致 if(){ System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } } } 現状はここまでできましたが完全一致の検索のやり方がわかりません。 あと問題点があるのですが 読み取るファイルがこのような場合 2000,田中 太郎,福島県 2001,福島 太郎,東京都 名前で福島 と検索をかけたとします この場合答えが 2000,田中 太郎,福島県 2001,福島 太郎,東京都 と表示されてしまいます このカンマで区切られている学籍番号、名前、出身地をうまく分け それぞれ判別する方法はないのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java
  • CSVファイルを二次元配列に格納するプログラム

    前回のソースコードを改変してみました String Str = ""; int Count = 0; try { File inFile = new File("./res/test.csv"); FileReader fr = new FileReader(inFile); BufferedReader br = new BufferedReader(fr); while (br.ready()) { Str = br.readLine(); String[] temp = Str.split(","); int[] m = new int[temp.length]; for (int i = 0; i < temp.length; i++) { m[i] = Integer.parseInt(temp[i]); System.out.print(m[i] + ","); } System.out.println(); Count++; } br.close(); fr.close(); } catch (Exception e) { System.out.println("ファイル読み込みに関するエラー"); } 今一次元配列になっているのですが、これを二次元配列に代入したいのです Countで何回ループしたかによって二次元配列の縦の要素数としたかったのですが、 そうすると横の要素数になるループ中の一次元配列が使えないので困っています

  • エラーの原因がわかりません

    JAVA初心者ですが、ファイル入力を行うプログラムを実行 すると、エラーが出ますが、そのエラーの原因が まったく見当がつきません。 誰か教えてください。 ------------読み込みデータ(loc.dat) 2 11 1 4 1 5 7 1 3 7 7 2 12 11 1 4 1 11 12 4 1 5 3 1 1 11 13 4 1 5 2 1 -------------プログラム import java.io.*; class ExReader {   public static void main(String[] args) { try { //読み込みファイル指定 FileReader fr = new FileReader("loc.dat"); BufferedReader br = new BufferedReader(fr); //ファイルから1行ずつ読み込む String s; while ((s = br.readLine()) != null) { System.out.println(s); } //読み込みファイルをクローズする br.close(); } catch (Exception e) { System.out.println("err: "+e); System.exit(1); } } } ---------------コンパイル結果 C:\JAVA\sim>javac ExReader.java ExReader.java:7: シンボルを解決できません。 シンボル: コンストラクタ FileReader (java.lang.String) 場所 : FileReader の クラス FileReader fr = new FileReader("loc.dat"); ^ ExReader.java:8: シンボルを解決できません。 シンボル: コンストラクタ BufferedReader (FileReader) 場所 : java.io.BufferedReader の クラス BufferedReader br = new BufferedReader(fr); ^ エラー 2 個

    • ベストアンサー
    • Java
  • シンボルを見つけられません / (char)に適用できません

    お世話になります、佐藤と申します。 いつも質問等を拝見し、参考にさせて頂いております。 現在、指定された入出力ファイルに対し、読書きを行うプログラムを作成しております。 出力するsrc[i]をメソッドtorokuを使ってファイルの書き込みを行いたいと思っておりますが、コンパイルエラーが出てしまいます。 インターネットや資料を探しましたが、どこにも原因が分かるような事は載っておりませんでした。 分かる方がいらっしゃれば、是非ご教授願いたいです。 エラーメッセージは以下となります。 (1)シンボルを見つけられません メソッド FileWriter(char) FileWriter fw = new FileWriter(src[i]); ^ (2)toroku(char[])(kadai10b内)を(char)に適用出来ません object.toroku(src[i]); ソースは以下となります。 import java.io.*; //入力ストリームクラスのインポート定義 public class kadai10b{ void toroku(char src[]){ int i; FileWriter fw = new FileWriter(src[i]); fw.write(src[i]); } public static void main(String[] args) { //入力ファイルの代入 if(args.length!=2){ System.out.println("引数の指定エラー! FileInFileOut コピー元ファイル コピー先ファイル"); return; } String input; input = args[0]; try{ //入力ファイル先名を保存 FileReader text = new FileReader(args[0]); BufferedReader data = new BufferedReader(text); String check; //出力ファイル先名を保存 FileWriter fw = new FileWriter(args[1]); //次レコードが無くなるまで繰り返す(nullじゃなければ繰り返せ) while((check = data.readLine())!=null){ char[] src = check.toCharArray(); byte[] bytes= check.getBytes(); //カナ氏名の出力 fw.write("カナ氏名 ="); for(int i = 0; i<15;i++){ kadai10b object = new kadai10b(); object.toroku(src[i]); } どうか、宜しくお願い致します。

  • HashMap.putについて

    ご質問させて頂きます。 hashMap.putの使い方が良く分かりません。 例えば、以下のようなkudamono.csvファイルがあるとします。 ------------------- A,2003/01/01,スイカ B,2003/02/01,バナナ C,2003/03/01,メロン D,2003/04/01,イチゴ ------------------- このデータをhashMap.putでセットしたいので 以下のようなクラスにしたんですが コンパイルエラーが出てしまいます。 ------------------- /*HashMap生成(クラス変数)*/ public static HashMap hashMap = new HashMap(); public static void main(String args[]) throws Exception { FileReader filereader = new FileReader("kudamono.csv"); BufferedReader bufferedreader = new BufferedReader(filereader); String line; int i = 1; int j = 0; while((line = bufferedreader.readLine()) != null) { System.out.println("Start line at " + i); StringTokenizer stringTokenizerTest = new StringTokenizer(line, ","); while(stringTokenizerTest.hasMoreTokens()) { HashMap.put(stringTokenizerTest.nextToken().toString()); j++; } i++; } filereader.close(); } } --------------- たぶんHashMap.putをする前に キーをセットしたり変数を宣言したりすると思うのですが その辺が良く分かりません。 ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • java utf-8 で ファイル出力

    【やりたい事】  ファイルを読み込んで、改行コードCRLFをLFに変換して、空白行は削除して、「正常終了しました。」は削除。  文字コードUTF8で出力したい。 【問題】  UTF-8で指定してるのに、Shift_JISで出力される。 【入力ファイル】  ファイル名:test.tsv  文字コード:UTF-8  改行コード:CRLF ************************ test test1 1 2 1 3 正常終了しました。 ************************ 【現在のソース】 import java.io.*; public class writeFile { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ try { //(1)FileReaderオブジェクトinFileを生成 FileReader inFile = new FileReader("test.tsv"); //(2)FileWriterオブジェクトoutFileを生成 FileWriter outFile = new FileWriter("test_lf.tsv"); //(3)BufferedReaderオブジェクトinBufferを生成 BufferedReader inBuffer = new BufferedReader(inFile); //(4)BufferedWriterオブジェクトoutBufferを生成 BufferedWriter outBuffer = new BufferedWriter(outFile); String line; int cnt=0; //(5)読み込みデータがなくなるまで、読み込み while ((line = inBuffer.readLine()) != null) { //(6)データの書き込み処理 if (line.equals("")){ cnt=cnt+1; }else{ if(cnt<=1){ outBuffer.write(line+"\n"); } } } outBuffer.flush(); //(7)バッファをフラッシュ inBuffer.close(); //(8)読み込みストリームのクローズ outBuffer.close(); //(9)書き込みストリームのクローズ } catch (IOException e) { } try { //(1) //(2)FileInputStreamオブジェクトの生成 FileInputStream abc = new FileInputStream("test_lf.tsv"); //(3)FileOutputStreamオブジェクトの生成 FileOutputStream xyz = new FileOutputStream("test_lf_utf.tsv"); //(4)InputStreamReaderオブジェクトの生成 InputStreamReader in = new InputStreamReader(abc, "Shift_JIS"); //(5)OutputStreamWriterオブジェクトの生成 OutputStreamWriter out = new OutputStreamWriter(xyz, "UTF-8"); int contents; //(6) //(7)読み込むデータがなくなるまで読み込み while ((contents = in.read()) != -1) { //(8)書き込むデータがなくなるまで書き込み out.write(contents); } in.close(); //(9)読み込みストリームを閉じる out.close(); //(10)書き込みストリームを閉じる } catch(IOException e) { } } } 【出力結果】  ファイル名:test_lf.tsv  文字コード:Shift_JIS  改行コード:LF ************************  test test1 1 2 1 3 ************************  ファイル名:test_lf_utf.tsv  文字コード:Shift_JIS  改行コード:LF ************************ test test1 1 2 1 3 ************************ 本当に困っています。 もう二日、はまってます。 ご教授願います。

    • ベストアンサー
    • Java
  • BMP画像の画像データ本体をテキストデータとして保存したい

    BMP画像を読み込んで、ヘッダ箇所などの本体と関係ない部分を読み飛ばして、画像本体をテキストファイルとして保存するプログラムを作ったのですが、実際の画像の大きさ(512x480)と出力結果(質問箇所最下に記載)の画像の大きさが異なってしまいます。あまり画像に詳しくないので、どこが間違っているのか分かりません。どこを修正すべきか教えてください。以下が作成したプログラムです。 public class bmpTotxt {  public static void main(String[] args){   try {    FileReader fr = new FileReader("./1.bmp");    BufferedReader br = new BufferedReader(fr);    FileWriter fw = new FileWriter("./pic.txt");    int i,count=0,len=0,width=512*4,height=0;    while((i = br.read()) != -1){     /* 画像本体箇所なら */     if(len >= 54){      fw.write(i+" ");      len++;      count++;            if(count == width){        fw.write("\n");        height++;        count = 0;      }     }     else{       len++;     }    }    System.out.println("ヘッダ長:"+54);    System.out.println("画像データ長:"+(len-54));    System.out.println("width:"+width/4);    System.out.println("height:"+height);    fr.close();    fw.close();   }   catch (Exception e) {    e.printStackTrace();   }  } } /* 出力結果   ヘッダ長:54   画像データ長:648480   width:512   height:316 */

    • ベストアンサー
    • Java
  • ファイルからデータをうまく読み込めません

    ファイルからデータを読み込んでクラスに宣言した変数に格納したいのですがうまく出来ません ------------------------------------------ import java.io.*; class date{ public String name; public int ko,su; } public class Helloworld { public static void main(String args[]){ date[] dt = new date[2]; BufferedReader br = new BufferedReader(new FileReader("フルパス")); String line; try{ int i=0; while((line = br.readLine())!=null){ dt[i].ko = dt[i].su = 0; dt[i].name = line; line = br.readLine(); dt[i].ko = Integer.valueOf(line).intValue(); line = br.readLine(); dt[i].su = Integer.valueOf(line).intValue(); System.out.println("名前:" + dt[i].name); System.out.println("国語:" + dt[i].ko); System.out.println("数学:" + dt[i].su); i++; } br.close(); }catch(Exception e){ System.out.println("エラー情報:" + e); } } } -------------------------- 上記のソースで実行すると java.lang.NullPointerException とエラーが出てます FileReadernの部分にカーソルを当てると この要素には接続されたソースも、接続された Javadoc もないため、情報を検出できませんでした と表示されました

    • ベストアンサー
    • Java

専門家に質問してみよう