2012-04-09 11 views
1

これは私の最初の投稿ですので、私が持っている間違いを親切に赦してください。私はまだスタックエクスチェンジの周りに自分の道を見つけることを学んでいます。ファイルのディレクトリの解析 - 文字列の確認

私は、.txtファイル、.rtfファイル、または.docファイルでいっぱいのディレクトリをスキャンしようとするJavaプログラムを作成しようとしています。その目的は、ディレクトリ内のすべてのファイルを検索し、ファイル内に特定の文字列が存在するかどうかを調べることです。そうであれば、文字列を見つけた文字列とファイル名を返します。

このプログラムの目的は、プログラムがコールセンターの従業員の個人用フォルダをスキャンして、任意のCC/DC番号を保存しています。そうであればフォルダ名を報告してCC詐欺を減らします。

検索機能はかなり単純で、ファイル名を個別に指定すると機能します。しかし、ディレクトリを検索してファイルを検索機能に渡すと、私は困惑しています。

あなたがそれを見て、私にいくつかのフィードバック/提案を与えることができたら、私は本当にありがとうと思います。事前に感謝

import java.io.*; 
import java.util.*; 

public class parse2{ 

void traverse(String directory) throws FileNotFoundException 
    { 
     File dir = new File(directory); 
      if (dir.isDirectory()) 
     { 
        String[] children = dir.list(); 
        for (int i=0; i<children.length; i++) 
       { 
      //System.out.println("\n" + children[i]); 
        reader(children[i]); 
       } 
      } 

    } 


void reader(String loc) throws FileNotFoundException 
{ //System.out.println("\nC:/Documents and Settings/h4d35/Desktop/javatest/chk/"+loc); 
    String s = ("C:/Documents and Settings/h4d35/Desktop/javatest/chk/"+loc); 
    //System.out.println("\n"+s); 
      FileReader fr = new FileReader(loc); 
    BufferedReader br = new BufferedReader(fr); 
    Scanner sc = new Scanner(br); 
    char[] chkArray; 
    int chk=1; 
    char ch; 
    while(sc.hasNext()) 
    { 
     String chkStr = sc.next(); 
     chkArray = chkStr.toCharArray(); 
     if ((chkArray[0]=='4')&&(chkStr.length()>13)) 
     { for(int i=0;i<chkArray.length;i++) 
      { ch=chkArray[i]; 
       if((ch=='0')||(ch=='1')||(ch=='2')||(ch=='3')||(ch=='4')||(ch=='5')||(ch=='6')||(ch=='7')||(ch=='8')||(ch=='9')) 
       { chk=0; 
        continue; 
       } 
       else 
       { chk=1; 
        break; 
       } 
      } 
      if(chk==0) 
       System.out.println("\n"+ chkStr); 
     } 
     else 
     if((chkArray[0]=='5')&&(chkStr.length()>13)) 
     { for(int i=0;i<chkArray.length;i++) 
      { ch=chkArray[i]; 
       if((ch=='0')||(ch=='1')||(ch=='2')||(ch=='3')||(ch=='4')||(ch=='5')||(ch=='6')||(ch=='7')||(ch=='8')||(ch=='9')) 
       { chk=0; 
        continue; 
       } 
       else 
       { chk=1; 
        break; 
       } 
      } 
      if(chk==0) 
      System.out.println("\n"+ chkStr); 
     } 
     else 
     if((chkArray[0]=='6')&&(chkStr.length()>13)) 
     { for(int i=0;i<chkArray.length;i++) 
      { ch=chkArray[i]; 
       if((ch=='0')||(ch=='1')||(ch=='2')||(ch=='3')||(ch=='4')||(ch=='5')||(ch=='6')||(ch=='7')||(ch=='8')||(ch=='9')) 
       { chk=0; 
        continue; 
       } 
       else 
       { chk=1; 
        break; 
       } 
      } 
      if(chk==0) 
      System.out.println("\n"+ chkStr); 
     } 
    } 
} 

public static void main(String args[]) throws FileNotFoundException 
{ 
    parse2 P = new parse2(); 
    P.traverse("C:/Documents and Settings/h4d35/Desktop/javatest/chk"); 
} 

} 

**

  • EDIT:変数「LOCは、」ファイル名のみを与える - ので、私は文字列変数「S」の下で、それへのパスの残りの部分を追加しました。出力はありません。 reader()関数の3行目のコメントを外すと、すべてのファイルの絶対パスが表示されます。私は、絶対パスを明示的に指定することで独自のreader()関数を試してみました。以下のコード:

    import java.io. *;

    import java.util。*;

パブリッククラスparse1 {

void read() throws FileNotFoundException 
{ FileReader fr = new FileReader("C:/Documents and Settings/h4d35/Desktop/javatest/chk/Call back customer.txt"); 
    BufferedReader br = new BufferedReader(fr); 
    Scanner sc = new Scanner(br); 
    char[] chkArray; 
    int chk=1; 
    char ch; 
    while(sc.hasNext()) 
    { 
     String chkStr = sc.next(); 
     chkArray = chkStr.toCharArray(); 
     if ((chkArray[0]=='4')&&(chkStr.length()>13)) 
     { for(int i=0;i<chkArray.length;i++) 
      { ch=chkArray[i]; 
       if((ch=='0')||(ch=='1')||(ch=='2')||(ch=='3')||(ch=='4')||(ch=='5')||(ch=='6')||(ch=='7')||(ch=='8')||(ch=='9')) 
       { chk=0; 
        continue; 
       } 
       else 
       { chk=1; 
        break; 
       } 
      } 
      if(chk==0) 
       System.out.println("\n"+ chkStr); 
     } 
     else 
     if((chkArray[0]=='5')&&(chkStr.length()>13)) 
     { for(int i=0;i<chkArray.length;i++) 
      { ch=chkArray[i]; 
       if((ch=='0')||(ch=='1')||(ch=='2')||(ch=='3')||(ch=='4')||(ch=='5')||(ch=='6')||(ch=='7')||(ch=='8')||(ch=='9')) 
       { chk=0; 
        continue; 
       } 
       else 
       { chk=1; 
        break; 
       } 
      } 
      if(chk==0) 
      System.out.println("\n"+ chkStr); 
     } 
     else 
     if((chkArray[0]=='6')&&(chkStr.length()>13)) 
     { for(int i=0;i<chkArray.length;i++) 
      { ch=chkArray[i]; 
       if((ch=='0')||(ch=='1')||(ch=='2')||(ch=='3')||(ch=='4')||(ch=='5')||(ch=='6')||(ch=='7')||(ch=='8')||(ch=='9')) 
       { chk=0; 
        continue; 
       } 
       else 
       { chk=1; 
        break; 
       } 
      } 
      if(chk==0) 
      System.out.println("\n"+ chkStr); 
     } 
    } 
} 

public static void main(String args[]) throws FileNotFoundException 
{ 
    parse1 P = new parse1(); 
    P.read(); 
} 

}

**

+0

ディレクトリへのフルパスを 'traverse()'メソッドに渡していますが、 'list()'がフルパスを指定していないファイル名を表示する際に気づかれませんでしたか? – madth3

+0

ここに質問される質問はありません。 –

+0

@ madth3 - これを克服するために、私は自分のコードにこれを追加しました-----------> String s =( "C:/ Documents and Settings/h4d35/Desktop/javatest/chk /" + loc ); \t \t //System.out.println("\n"+s); \t \t FileReader fr =新しいFileReader(s); – rahuL

答えて

0

私が見る最大の問題は、あなたの代わりに再帰的にディレクトリのtraverse()を呼び出すべきである、とだけ呼び出す必要がありますということですファイルのreader()また、問題のあるコード行をデバッガでステップ実行する必要があります。ブレークポイントを設定し、Eclipseやおそらく他のIDEでコードをステップ実行するのは本当に簡単です。

組み込みAPIを使用してファイル名拡張子で簡単にフィルタリングできます。 FilenameFilterFile.list(FilenameFilter)または(好ましくは)File.listFiles(FilenameFilter)をチェックしてください。可能であれば、ファイルとディレクトリのパスを保存することを避けてください。Strings - 代わりに、Fileオブジェクトを使用してください。

お客様のreaderメソッドはString.matches(...)またはString.regionMatches(...)を使用すると簡略化できます。これらの方法(と同様のもの)は両方ともregular expressionの比較です - 具体的にはPatternクラスを見てください。同じ比較を繰り返しているので、何度も繰り返し使用するために1つまたは複数のPatternを作成することもできますが、これは単なるパフォーマンスの最適化です。

+0

あなたの助けてくれてありがとう。私はそれらを通り、可能な限りコードを最適化することを確かにするだろう。 – rahuL