1

これは半宿題で、何年も試してきましたが、運が悪かったので、基本的に検索エンジンのようなプログラムを実行しています。このプログラムでは、ディレクトリとそのサブディレクトリのファイルを読み取り、テキストファイルを読み取って一致するものを検索します。 、私は延々と検索しましたが、明確な答えがなかったので、誰か助けていただければ幸いです。

これは私の最善の試みでしたが、サブディレクトリからファイルを取得し、メイン/ルートディレクトリを無視するという問題があり、理由を理解しようとしましたが、できませんでした。

 public void indexDirectory(File dir) {
       for(int i=0;i<50;i++)
           ls[i]=new LinkList();//array of Linked lists to store addresses of each Linked list that has a file 
    try{
       files= dir.listFiles();

       for (int i = 0; i < files.length; i++) {
           if(files[i].isDirectory())
               indexDirectory(files[i]);

           if(files[i].isFile()){
               if(files[i]!=null)
                   indexFile(files[i]);
       } //end if(isFile)
      } //end For loop
   }catch(FileNotFoundException e){
       System.out.println("error ");

   }}

Webを検索し、見つけたものをエミュレートしようとした後の2番目のバージョンですが、残念ながら機能しませんでした。

public void indexDirectory(File dir) {


       for(int i=0;i<50;i++)
           ls[i]=new LinkList();
    try{
       if(dir.isFile()){
     indexFile(dir); //this method takes each directory and read the words and save them  in
                            //      array of linked list
       }
 else if(dir.isDirectory()){
     files= dir.listFiles();
       if(files!=null) {
       for (int i = 0; i < files.length; i++)  {
           if(files[i].isDirectory()){
           indexDirectory(files[i]);      //recursive call
       }}
   }catch(FileNotFoundException e){
       System.out.println("error ");

   }}
4

1 に答える 1

1

最初のバージョンでは、file.length全体をループして、file.isDirectoryのみをチェックし、その後(つまり、すべてのファイル/フォルダーをトラバースした後)、それがファイルであるかどうかをチェックします。そのため、現在のディレクトリのファイルを読み取ることができません。簡単に言えば

if(files[i].isFile()){
           if(files[i]!=null)
 indexFile(files[i]);      //the method to read from these files and save to array of lists.
       }

forループをブロックすると、最初のバージョンで機能するはずです。ここでls変数の目的を理解していなかったことがもう1つあります。

于 2012-12-07T02:41:47.830 に答える