- ベストアンサー
拡張子の読み込み制限を設けたいのですが・・・
現在Javaのプログラム課題を行っているものです。 前回こちらで質問させていただいたのですが、 解決に至らなかったので再度質問させていただきたいと思います。 前回の質問→ http://okwave.jp/qa4023470.html こちらが修正後のプログラムの一部です。↓ package studyA; import java.util.*; import java.io.FileReader; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.IOException; public class A23_StrArray extends A22_StrArray { /** * テキストファイルの読込み(上書きモード) * @param path ファイルのパス * @exception FileNotFoundException ファイルが見つからなかった場合 * IOException 入出力エラーが発生した場合 */ // 修正として付け加えた部分(開始位置) public class CheckClass check { check = new CheckClass(); check = path; public boolean accept(path) { //拡張子がtxtであるかのの判定を行います。 String ext = getExtension(path); if (ext != null && ext.equals("txt")) { return true; } } } //プログラム修正箇所 (終点) public void readFile(String path) throws Exception { try { //BufferedReader in = new BufferdReader(new FileReader()) FileReader fr = new FileReader(path); //FileReaderのインスタンスを作成 BufferedReader br = new BufferedReader(fr); //BufferedReaderのインスタンスを作成 String line; list.clear(); //リストをクリア while ((line = br.readLine()) != null) //要素がなくなるまで繰り返す { add(line); } System.out.println("ファイルを読み込みしました。"); br.close(); } catch(FileNotFoundException e)//ファイルが見つからなかった時 { System.out.println("ファイルが見つかりません。"); } catch(IOException e)//入出力エラーが発生した場合 { System.out.println("入出力エラーが発生しました。"); } } 現在は、コンパイルエラーでC:\Java>javac A23_StrArray.java A23_StrArray.java:28: '{' がありません。 public class CheckClass check と表示されます。一体どのように修正を加えれば、 txtのみ読み込んで、上書きなどができるプログラムを作ることができるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> // 修正として付け加えた部分(開始位置) > public class CheckClass check > { > check = new CheckClass(); > check = path; > public boolean accept(path) > { > //拡張子がtxtであるかのの判定を行います。 > String ext = getExtension(path); > if (ext != null && ext.equals("txt")) > { > return true; > } > } > } > //プログラム修正箇所 (終点) この部分って インナークラスの定義なんですか? それとも 拡張子チェックのロジック部分ですか? インナークラスなら > public class CheckClass check の最後の check は変ですよね ロジックにしても > check = new CheckClass(); > check = path; の部分で CheckClassをインスタンス化してから それにpathを代入して潰してるし ・・・
その他の回答 (2)
- Apr2nd
- ベストアンサー率69% (36/52)
#1です。 コンパイル時のエラーについては先ほどおかしいと書いた部分の文法エラーの為ですね。 とりあえず拡張子のチェックをするだけならば、こんな感じでどうでしょうか? 1.今回のソースで「修正で付け加えた部分」の開始から終了までざっくり消す。 2.readFile()メソッドの中のFileReaderのインスタンス生成前にpath変数に含まれる拡張子をチェックする。 (以下のソースは動作確認はしていませんのでこんな感じでってことで) public void readFile(String path) throws Exception { try { if (path != null && !path.endsWith(".txt")) { System.out.println("パスがおかしいか、拡張子が違うみたい"); return; } FileReader fr = new FileReader(path); //FileReaderのインスタンスを作成 (以降省略) ※ソースの前に全角空白が入っているのでそのままコピー&ペーストするとエラーになります。
お礼
迅速な回答ありがとうございました。 この様な分かりにくい問いにお答えくださった事に感謝いたします。 早速貼り付けて試して見ることにします。
- Apr2nd
- ベストアンサー率69% (36/52)
ソースはちゃんと見ていませんが、以下のソースの「check」って何でしょう? 文法的に気になるんですが… > // 修正として付け加えた部分(開始位置) > public class CheckClass check
補足
はい、それはチェッククラスの変数名として宣言した物です。 拡張子のチェックを行いたいので、checkという名前にしたのですが・・・ それ自体がもしやまずかったのでしょうか?
補足
申し訳ありません。 チェックロジック部分を組んだつもりなのですが、 あまりにもお粗末でしたね・・・ この様な場合はどのように式の構築をすればよいのでしょうか?