• 締切済み

シンボルを見つけられません / (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]); } どうか、宜しくお願い致します。

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

みんなの回答

noname#119918
noname#119918
回答No.2

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.Reader; import java.io.Writer; import java.io.IOException; class InOut{ /** * Reader r から読み取り、Writer wに書き込む * @param r 読み取り元 * @param w 書き込み先 **/ static void inout(Reader r , Writer w) throws IOException{ BufferedReader br = new BufferedReader(r); BufferedWriter bw = new BufferedWriter(w); String line; while((line = br.readLine()) != null){ bw.write(line); // 文字列書き込み bw.newLine(); // 改行 bw.flush(); // フラッシュ } } public static void main(String[] args) { if(args.length!=2){ System.out.println("FileInFileOut コピー元ファイル コピー先ファイル"); return; } try { Reader r = new FileReader(args[0]); Writer w = new FileWriter(args[1]); inout(r,w); r.close(); w.close(); } catch(IOException e){ e.printStackTrace(); } } } かなり書き換えてしまいましたが、 こんな感じでいかがでしょう。 メソッドinoutで集中して読み書きを行います。

satohdesu
質問者

お礼

HKB様。 御回答をありがとうございます。 わざわざコーディングまで記述して頂き、心より感謝しております。 非常に綺麗なコーディングで驚きました。 このコーディングを参考にさせて頂いて、元のプログラムを修正したら上手く処理する事が出来ました。 私も早くHKBさんのようなプログラマーを目指したいと思います。 本当にありがとうございました。

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.1

う~ん、いろいろ問題点がありそうです。 もしかしてコピー間違いもあるのかな。 まず、エラーメッセージの直接の原因は、 >FileWriter fw = new FileWriter(src[i]); ここだと思われます。 もともとFileWriterクラスはその名の通り、「ファイルに書き込む」クラスです。 コンストラクタ(new FileWriter(…)の部分)の引数は、ファイル名やFileオブジェクトでないとだめです。 src[i]は、「書き込みたいデータ」だと思われますので、ここでは指定しません。 ※2番目のエラーは最初のエラーに引きずられているエラーなので、重要ではありません。 ただ、これ以外にもエラーが発生するであろうポイントはまだまだあります。 ・mainメソッドのtryに対するcatchがない。 ・コードの最後の方で、「{」に対する「}」が足りていない。 などありますが、 そもそもtorokuメソッドを作ったのはどうしてでしょうか? mainメソッドのfor部分にそのまま書いていても特に問題ないコードのように見えますが… むしろtorokuメソッドに分割してしまったせいで、mainメソッドでオープンしたfwは torokuメソッドでは使用できなくなっています。 今回のコードを見る限り、最初は無理せずmainメソッド内で簡潔するコードを書いて、 それから機能ごとにメソッドに分離した方が分かりやすいかと思います。

satohdesu
質問者

お礼

neko_noko様、ご回答をありがとうございます。 成る程、 FileWriter fw = new FileWriter(src[i]); ここに原因があったのですね。 これを修正したところ、おっしゃる通り沢山コンパイルエラーが発生しました・・・。 一つ一つ修正したら上手く行きました。 今回はメソッドを呼び出してプログラムを作ってみようと思い、作成致しました。 以前作成したmainメソッド内で動くプログラムを参考にと再作成した次第です。 とても的確なご回答&アドバイスをありがとうございました。 心より感謝いたします。

関連するQ&A

  • 入力(ファイル)の入力チェックにつきまして

    いつも参考にさせて頂いております、佐藤と申します。 入力ファイルの項目チェックを行おうとしておりましたが、 どうもコンパイルエラーが発生してしまいます。 原因が分かる方がいらっしゃいましたら、是非ともご教授願います。 以下がコーディングの一部となります。 FileReader text = new FileReader(args[0]); BufferedReader data = new BufferedReader(text); String check; FileWriter fw = new FileWriter(args[1]); while((check = data.readLine())!=null){ char[] src = check.toCharArray(); //第1~2パラメータをワークに代入 try{ n = Integer.parseInt(check[0]); n2=Integer.parseInt(check[1]); }catch(java.lang.NumberFormatException e){ System.out.println("第1~2パラメータが不正です"); return; } どうも、「//第1~2パラメータをワークに代入」の下でエラーとなっているようです。 エラーの内容は、「配列が要求されましたが、Java.lang.Stringが見つかりました」と表示されてしまいます。 どうか宜しくお願い致します。

  • ファイル操作 ファイルに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でString型をChar型に変換するプログラムが分かりません

    JavaでString型をChar型に変換するプログラムが分かりません;; どなかた助けて下さい。 下のプログラムの何がいけないんでしょうか?? いろいろ間違ってるところはあると思うんですが、教えて下さい! import java.io.*; class { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); StringBuffer moji = new StringBuffer(str1); char nyuu=moji;

  • 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){ } } }

  • ファイル出力時の

    以下のソースでファイル出力するのですが、 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); } コンソールへの出力は正常に出力されるのですが、 ファイルへの出力は改行されずに一行で出力されてしまいます。 どうすればファイル出力も正常になるか教えてください。

  • BufferedReaderなどについて

    今JAVAを勉強しているのですが。 少しつまづいてしまいました。 ---------------------------------------------- import java.io.*; class Cat { public static void main(String args[]) throws IOException { File inputFile = new File(args[0]); FileReader in = new FileReader(inputFile); BufferedReader br = new BufferedReader(in); //・・・続く ---------------------------------------------- 上のプログラム全て、といいますか import java.io.*; や BufferedReader のことが特によく分かりません。いろいろサイトや本などを見てみたのですが、それでもいまいち理解できませんでした。どなたか、教えてください、お願い致します

    • ベストアンサー
    • Java
  • 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でやる予定です。

  • 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
  • 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 テキストからの読み込みについて

    以下はsample121.txtというファイルからデータを読み込むプログラムとして とある本に紹介されていた方法を参考にしたものですが while文の中に1文字目を表示したら、2文字めに移行する指示がなされていないように思い 実際に書いて、実行してみましたところ やはり1文字目だけが延々と羅列される結果となりました。 一文字ずつ順番に読み込むとすれば どこを修正すればいいでしょうか。 よろしくお願いします。 import java.io.FileReader; public class traning7 { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ try { FileReader fw = new FileReader("sample121.txt"); int i = fw.read(); while(i != -1){ char c = (char) i ; System.out.println(c); } System.out.println("ファイルの末尾に到達しました。"); fw.close(); }catch(Exception e){ System.out.println("error"); } } }

    • ベストアンサー
    • Java

専門家に質問してみよう