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 中的字符串运算符不会像您预期的那样运行。改用equalsorequalsIgnoreCase方法!

于 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

您想使用字符串比较之一来比较文件名,可能是files.startsWith("LAYER.EXE.pf"). equals()(在这种情况下)仅在两个对象是同一个实例时才返回 true。

于 2011-01-31T14:49:44.817 回答
0

首先,对于 Java 中的字符串比较,您需要做.equals()而不是==as==实际上只会在字符串是同一个对象时才评估为 true,而不是比较字符串本身的值。

所以那将是 if(files.equal("LAYER.EXE.pf"))"

其次,您应该使用该.startsWith()函数检查字符串的第一个字符是否与另一个字符串匹配

所以,做吧 if(files.startsWith("LAYER.EXE")),你应该没问题

于 2011-01-31T14:52:03.203 回答
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 回答