こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

拡張子の読み込み制限を設けたいのですが・・・

現在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のみ読み込んで、上書きなどができるプログラムを作ることができるのでしょうか?

投稿日時 - 2008-05-16 16:18:41

QNo.4026727

すぐに回答ほしいです

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

> // 修正として付け加えた部分(開始位置)
> 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を代入して潰してるし ・・・

投稿日時 - 2008-05-16 16:58:21

補足

申し訳ありません。
チェックロジック部分を組んだつもりなのですが、
あまりにもお粗末でしたね・・・

この様な場合はどのように式の構築をすればよいのでしょうか?

投稿日時 - 2008-05-16 17:06:53

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#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のインスタンスを作成

             (以降省略)

※ソースの前に全角空白が入っているのでそのままコピー&ペーストするとエラーになります。

投稿日時 - 2008-05-16 17:35:44

お礼

迅速な回答ありがとうございました。
この様な分かりにくい問いにお答えくださった事に感謝いたします。
早速貼り付けて試して見ることにします。

投稿日時 - 2008-05-16 17:48:35

ANo.1

ソースはちゃんと見ていませんが、以下のソースの「check」って何でしょう? 文法的に気になるんですが…

> // 修正として付け加えた部分(開始位置)
> public class CheckClass check

投稿日時 - 2008-05-16 16:52:25

補足

はい、それはチェッククラスの変数名として宣言した物です。
拡張子のチェックを行いたいので、checkという名前にしたのですが・・・ それ自体がもしやまずかったのでしょうか?

投稿日時 - 2008-05-16 16:54:29

あなたにオススメの質問