• 締切済み

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

みんなの回答

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