1

これは私の最初の投稿ですので、私が持っている間違いをお許しください。私はまだ Stack Exchange の使い方を学んでいます。

.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");
}

}

**

  • 編集:変数「loc」はファイル名のみを提供するため、文字列変数「s」の下に残りのパスを追加しました。出力はありません。reader() 関数の 3 行目のコメントを外すと、すべてのファイルの絶対パスが表示されます。絶対パスを明示的に指定して、reader() 関数を単独で試してみましたが、うまくいきました。以下のコード:

    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();
}

}

**

4

1 に答える 1

0

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

ビルトイン API を使用して、ファイル名拡張子で簡単にフィルタリングできます。FilenameFilterand File.list(FilenameFilter)or (できれば)をチェックしてくださいFile.listFiles(FilenameFilter)。可能な限り、ファイルおよびディレクトリ パスを次のように保存しないようにしてください。代わりに、オブジェクトStringsを使用してください。File

またはを使用すると、メソッドを簡略reader化できます。これらの方法 (および同様の方法) はどちらも正規表現の比較です。特に、クラスを見てください。同じ比較を何度も繰り返しているため、1 つ以上の を作成して何度も再利用したい場合がありますが、それは単なるパフォーマンスの最適化です。String.matches(...)String.regionMatches(...)PatternPattern

于 2012-04-10T00:28:51.590 に答える