4

こんにちは、私はこれをほとんど解決しましたが、今行き詰まっています! 私がする必要があるのは、フォルダを見て..

String path = C://;

次に、そのフォルダーにあるファイルの数を確認するループが必要です。たとえば、10 です。次のように始まるファイルを探す必要があります。

LAYER.EXE-******.pf

*****他のものによって変わる可能性がありますが、それは重要ではありません.LAYER.EXEを開始するファイルを見つけたときにフラグを立てます. 以下は私が取り組んできたことです。:)

    String path = "C://";
    String files;
    File folder = new File(path);
    File[] listOfFiles = folder.listFiles();

    for (int i = 0; i < listOfFiles.length; i++){
        if (listOfFiles[i].isFile()){
                files = listOfFiles[i].getName();
                System.out.println(files);
                if (files == "LAYER.EXE.pf"){
                    System.out.println("found =================");
            }
        }
    }
4

8 に答える 8

6
files == "LAYER.EXE.pf"

への変更

"LAYER.EXE.pf".equals(files)

あなたがしているのは参照比較であり、平等が必要です。詳細はこちらをご覧ください

さらに言えば、これにより、「LAYER.EXE.pf」と同じ名前のファイルのみが得られます。

試すfiles.startsWith("LAYER.");

于 2011-01-31T14:47:42.307 に答える
3

FileNameFilterを使用できます

public void listFiles() {

        File f = new File("C:/");
        String[] allFiles = f.list(new MyFilter ());
        for (String filez:allFiles ) {
            System.out.println(filez);
        }
    }
    class MyFilter implements FilenameFilter {


        @Override
        public boolean accept(final File dir, final String name) {
            return name.startsWith("LAYER.EXE.pf");
        }
    }
于 2011-01-31T14:52:20.697 に答える
1

ファイル名をフィルタリングする必要がある場合は、ファイル名フィルターの使用を検討してください。

File[] files = directory.listFiles(new FilenameFilter() {
     public boolean accept(File dir, String fileName) {
       return fileName.startsWith("LAYER.EXE-") && fileName.endsWith(".pf");
     }
   });

このフィルターは、現在の実装ではなく、要件に基づいています。

files配列には、ファイル名がフィルターによって受け入れられるオブジェクト、つまり「パターン」に一致するファイルのみが含まれるFileようになりました。LAYER.EXE-****.pf

于 2011-01-31T14:58:42.937 に答える
0

で始まるファイルが必要な場合は、LAYER.EXEこれを変更することをお勧めします。

if (files == "LAYER.EXE.pf") 

の中へ:

if (files.startsWith("LAYER.EXE.pf"))

==Java の文字列に対する演算子は、期待どおりに動作しないことに注意してください。代わりにequalsorメソッドを使用してください。equalsIgnoreCase

于 2011-01-31T14:49:17.453 に答える
0

文字列を別の文字列と照合するには、「==」ではなく equals メソッドを使用する必要があります。そうしないと、式の代わりにオブジェクトの参照を比較することになります。listOfFiles を反復処理することで、より適切なループを使用することもできます。修正されたコードは次のとおりです。

String path = "C://";
    String files;
    File folder = new File(path);
    File[] listOfFiles = folder.listFiles();

    for (File checkedFile : listOfFiles){
        if (checkedFile.isFile()){
                files = checkedFile.getName();
                System.out.println(files);
                if (files.equals("LAYER.EXE.pf")){
                    System.out.println("found =================");
            }
        }
    }
于 2011-01-31T14:49:34.110 に答える
0

おそらく、文字列比較の 1 つを使用してファイル名を比較しますfiles.startsWith("LAYER.EXE.pf")equals()(この場合) は、2 つのオブジェクトが同じインスタンスである場合にのみ true を返します。

于 2011-01-31T14:49:44.817 に答える
0

FileFilter を使用して、名前パターンに適合するファイルのみを取得できます。このような:

String path = "C://";  
File folder = new File(path);    
File[] listOfFiles = folder.listFiles(new FileFilter(){  
    public boolean  accept(File f){  
        return (f.startsWith("LAYER.EXE"));  
    }  
});  

そこには、必要なすべてのファイルを含む配列があり、それらだけが含まれています。次に、配列が無効かどうかをテストし、そうでない場合はファイルを処理します。

于 2011-01-31T14:57:41.807 に答える
0

まず第一に、Java での文字列比較では、文字列自体の値を比較する代わりに、文字列が同じオブジェクトである場合にのみ実際に true と評価されるas.equals()の代わりに行う必要があります。====

それはそうでしょう if(files.equal("LAYER.EXE.pf"))"

次に、.startsWith()関数を使用して、文字列の最初の文字が別の文字列と一致するかどうかを確認する必要があります

だから、そうするだけで大​​丈夫 if(files.startsWith("LAYER.EXE"))です

于 2011-01-31T14:52:03.203 に答える