• ベストアンサー

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

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

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

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

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

mimi_28
質問者

補足

申し訳ありません。 チェックロジック部分を組んだつもりなのですが、 あまりにもお粗末でしたね・・・ この様な場合はどのように式の構築をすればよいのでしょうか?

その他の回答 (2)

  • Apr2nd
  • ベストアンサー率69% (36/52)
回答No.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のインスタンスを作成              (以降省略) ※ソースの前に全角空白が入っているのでそのままコピー&ペーストするとエラーになります。

mimi_28
質問者

お礼

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

  • Apr2nd
  • ベストアンサー率69% (36/52)
回答No.1

ソースはちゃんと見ていませんが、以下のソースの「check」って何でしょう? 文法的に気になるんですが… > // 修正として付け加えた部分(開始位置) > public class CheckClass check

mimi_28
質問者

補足

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

関連するQ&A

  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • Javaのカウント方法について

    お伺い致します。 CSVで取り込んだデータの抽出をしたいのですが、方法が見出せません。どの点を直せば宜しいのでしょうか。 具体的には取り込んだ郵便番号をカウントして(例:京都市,34)CSVファイルに出力するように出したいのですがカウントがうまくできません。(以下、コメントアウトしたものがありますが、今までのソースを記載します) 宜しく御願いします。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); BufferedWriter pw = new BufferedWriter(new PrintWriter("orig.txt")); String line = reader.readLine(); System.out.println(line); pw.println(""); int n = 0; int count = 0; _/* while(true) { String line = reader.readLine(); if(line.equals("26101")) break; count++; } */ reader.close(); System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } }

    • ベストアンサー
    • Java
  • Servletでcsvファイル読込

    Servletからcsvファイルを読込む処理を作成しています。 しかし、FileNotFoundExceptionが発生してファイルを読込めません。 下記のように記述した場合、csvファイルはどこに置けばよいのでしょうか? いろいろファイルの置き場所を変えてはやってみましたがダメでした。 package action; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class MemberEntryAction extends Action{ public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { try { // 入力ストリームを作成。 FileReader fr = new FileReader("a.csv"); BufferedReader br = new BufferedReader(fr); // 読込みループ。 String line; // 読み込まれた1行。 while( (line = br.readLine()) != null ) { System.out.println(line); } // 入力・出力ストリームを閉じる。 br.close(); fr.close(); } catch ( FileNotFoundException e ) { System.out.println("FileNotFound!"); } return mapping.findForward("memberMenu"); } }

  • Javaのカウント方法について

    neko_noko様 補足の項目がなかったので新規質問という形ですが、Javaのカウント方法について続きで伺います。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; //Stringtoknizer st = new Stringtoknizer(line,","); public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); int count = 0; String line = reader.readLine(); while(line != null) { if(line.equals("26101")){//配列を設定? count++; } line = reader.readLine(); } reader.close(); //この部分で配列をソート? System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } } のようにしましたが、仮に集計できても、当然郵便番号が26101=24(件)、26102=2*(件)となってしまい、北区=24(件)、下京区=2*件という形にしたければ、『if(line.equals("26101")){』の部分で文字列の配列を設定し、『reader.close();』の後に配列で計算したものをソートすれば北区=24と表示できるかと思ったのですが、クエリで集計する湖と以外で、このような方向性で正しいでしょうか。たびたびで質問で申し訳ありません。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 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
  • ファイル読み込みで

    市販のテキストでファイルを読み込むプログラムを作ったのですがうまくできません。 import java.io.*; public class ShowFile{ public static void main(String args[]){ if(args.length != 1){ System.out.println("使用法: java ShowFile ファイル"); System.out.println("例: java ShowFile ShowFile.java"); System.exit(0); } String filename = args[0]; try{ BufferedReader reader = new BufferedReader(new FileReader(filename)); String line; while((line = reader.readLine()) != null){ System.out.println(line); } reader.close(); }catch(FileNotFoundException e){ System.out.println(filename + "が見つかりません"); }catch(IOException e){ System.out.println(e); } } } javac ShowFile.javaでコンパイルはうまくいったのですが、 実行時にjava ShowFile input.txtとするとException in thread "main" java.lang.NoClassDefFoundError: ShowFile というエラーが出ます。input.txtというファイルは存在します。 アドバイスをお願いします。

    • ベストアンサー
    • Java
  • JAVAのソートプログラムについて

    List1.txtの内容の単語の数を数え、その数を単語の隣に表示するプログラムを作りました。 (1)List1.txtの内容 ゲーム ゲーム 麻雀 麻雀 野球 ゲーム (2)実行結果 C:\>java Lists ゲーム 3 野球 1 麻雀 2 (3)プログラム import java.io.BufferedWriter; import java.nio.charset.Charset; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.*; public class Lists { public static void main(String[] args) throws IOException{ File file3 = new File("C:\\List1.txt"); BufferedReader br3 = new BufferedReader(new FileReader(file3)); FileWriter filewriter3 = new FileWriter(file3,true); TreeMap<String,Integer> tm = new TreeMap<String,Integer>(); String line; while((line = br3.readLine()) != null){ String[] words = line.split("\\s"); for(String s : words){ if(!tm.containsKey(s)){ tm.put(s,1); }else{ tm.put(s,tm.get(s).intValue()+1); }} } for(String s : tm.keySet()){ System.out.println(s + " " + tm.get(s) ); }}} このプログラムを上から単語の数が多い順に表示したいのですがどこをどう修正したらいいのか悩んでます。 C:\>java Lists ゲーム 3 麻雀 2 野球 1 と表示されればOKです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのソートプログラムについて

    List1.txtの内容の単語の数を数え、その数を単語の隣に表示するプログラムを作りました。 (1)List1.txtの内容 ゲーム ゲーム 麻雀 麻雀 野球 ゲーム (2)実行結果 C:\>java Lists ゲーム 3 野球 1 麻雀 2 (3)プログラム import java.io.BufferedWriter; import java.nio.charset.Charset; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.*; public class Lists { public static void main(String[] args) throws IOException{ File file3 = new File("C:\\List1.txt"); BufferedReader br3 = new BufferedReader(new FileReader(file3)); FileWriter filewriter3 = new FileWriter(file3,true); TreeMap<String,Integer> tm = new TreeMap<String,Integer>(); String line; while((line = br3.readLine()) != null){ String[] words = line.split("\\s"); for(String s : words){ if(!tm.containsKey(s)){ tm.put(s,1); }else{ tm.put(s,tm.get(s).intValue()+1); }} } for(String s : tm.keySet()){ System.out.println(s + " " + tm.get(s) ); }}} このプログラムを上から単語の数が多い順に表示したいのですがどこをどう修正したらいいのか悩んでます。 C:\>java Lists ゲーム 3 麻雀 2 野球 1 と表示されればOKです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaでCSVの中身から最大値を表示したい

    タイトルの通りなのですが、javaのプログラムでCSVの中の少数を読み込み、そこから最大値を表示したいのです。 CSVの中身は 10.1,20.2,30.3,40.4,50.4 100.1,200.2,300.3,400.4 という半角の少数がカンマで区切られた状態になっています。 import java.util.Scanner; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class test { public static void main(String args[]) throws NumberFormatException, IOException{ System.out.println("csvのファイル名を入力"); Scanner sc = new Scanner(System.in); String str = sc.next(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(str))); String line; while((line=br.readLine())!=null){ String[] sp = line.split(","); double sum=0;//合計値格納用 for(int i=0;i<sp.length;i++){ sum += Double.parseDouble(sp[i]); } System.out.println(line+"の合計値は"+sum); } br.close(); } } 上記のプログラムは、CSVの中身の各行の合計値を算出するもので、これを元に各行の最大値を算出したいのですが、どうしても比較演算子を使用しての算出がうまくいきません。 どなたかプログラムに詳しい方がいましたら、ご教授いただけると助かります。 つたない文章ですがよろしくお願いします。

    • ベストアンサー
    • Java
  • テキストファイルから読み取り配列にあてはめソート

    宿題できなくてあせってます。 宿題の内容は、テキストファイル(textstrs.txt)の内容を読み取ってARRAYに入れて 以下がテキストファイルの中身 3 Jones, Chris C Ferguson, Tom J Pryor, Richard P 一番初めのナンバーをARRAYのスロット数となり、そのスロットに 以下の3人の名前をあてはめ、アルファベット順に並び替えしたものを コンソールとテキストファイル(strsdataout.txt)に書くというものです。 今の段階は、まず読んでそのままコンソールに出すところですが それさえうまくいきません。とほほ 誰かわかる方おしえていただけますか。 import java.util.Scanner; import java.io.*; public class StringProject5 { //#1 public static void main(String[] args) throws Exception { //#2 // Create a File instance java.io.File inputFile = new java.io.File("D:\\teststrs.txt"); java.io.File outputFile = new java.io.File("D:\\strdataout.txt"); // Create Scanner for the file Scanner input = new Scanner(inputFile); FileReader in = new FileReader(inputFile); java.io.PrintWriter out = new java.io.PrintWriter(outputFile); BufferedReader br = new BufferedReader(in); int size = input.nextInt(); String[] strarray = new String[size]; int x = 0; while (input.hasNext()){ // while String ln = input.nextLine(); strarray [x] = ln; x++; } // end of while for (int i = 0; i < strarray.length; i++){ // for loop System.out.println(strarray[i]); //writing array in console }// end off for loop } //#2 } //#1*/

専門家に質問してみよう