0

私がする必要があるのは、ユーザーからファイルを検索するためのパスを取得し、検索するファイル名の一部であるユーザーから文字のセットを取得することです。ファイルが見つかると、サブフォルダーを含むすべての場所が完全なファイル名とともに表示されます。私が行ったことは、指定されたパス内のすべてのファイルを取得し、ListFiles()を使用してFile[]配列に配置します。。すべてのファイルの名前を取得し、それらを配列リストに保存します。別の配列リストを作成し、前の配列リストの拡張子なしでファイル名のみを保存します。次に、ユーザーが入力した文字セットを使用して、この配列リストの各ファイル名と比較します。これが機能しているかどうかをテストするために、印刷しましたが、ユーザーが入力した文字セットに一致するファイル名だけでなく、すべてのファイル名を印刷しました。これが私のコードです:

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

public class FileSearch
 {
  public static void main(String args[])
   {
    try
     {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("  1.Enter the path to search:");
        String str = br.readLine();
        System.out.println("  2.Enter some characters of the filename:");
        String str1 = br.readLine();

        File files = new File(str);

        File[] f = files.listFiles();     

        List<String> li = new ArrayList<String>();
        List<String> li1 = new ArrayList<String>();

        for(int i=0;i<f.length;i++)
        {
            if(f[i].isFile())
            {
                li.add(f[i].getName());
            }
        }

        for(int i=0;i<li.size();i++)
        {
           int j = li.get(i).lastIndexOf('.');
           li1.add((j>-1)?li.get(i).substring(0, j):li.get(i));
        }

        for(int i=0;i<li1.size();i++)
         {
            if(li1.get(i).contains(str1));
            {
                System.out.println(li1.get(i));
            }
        }
     }
    catch(Exception e)
     {
        e.printStackTrace();
     }
  }
 }
4

2 に答える 2

2

あなたのコードは絶対に問題ありません。次のステートメントは、問題の根本原因です。

if(li1.get(i).contains(str1));
{
    System.out.println(li1.get(i));
}

明確に観察;した場合は、if 条件の後に使用しています。セミコロンを削除すると、コードは正常に機能します。

于 2013-01-14T16:56:52.570 に答える
2

ここでこの記事を見てください。プログラムのデバッグ方法を理解するのに役立ちます。次のようにフルパスを作成できるようです。

String fullPath = files.getAbsolutePath() + li1.get(i);
于 2013-01-14T16:58:06.650 に答える