Java查找文件名和扩展名的开头

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 =================");
            }
        }
    }
8个回答

6
files == "LAYER.EXE.pf"

转换为

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

你所做的是引用比较,并且需要相等性。更多信息请点击这里
进一步说,这将只给你文件名等于“LAYER.EXE.pf”的文件。
尝试files.startsWith("LAYER.");

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

1
如果你需要过滤文件名,那么可以考虑使用一个文件名过滤器。
File[] files = directory.listFiles(new FilenameFilter() {
     public boolean accept(File dir, String fileName) {
       return fileName.startsWith("LAYER.EXE-") && fileName.endsWith(".pf");
     }
   });

该过滤器基于您的需求而不是当前实现。

files 数组现在仅包含文件名符合过滤器要求的 File 对象,换句话说,文件名匹配 "pattern" LAYER.EXE-****.pf 的文件。


0
要检查一个字符串是否与另一个字符串相等,你不应该使用 "==",而是应该使用 equals 方法,否则你会比较对象的引用而不是表达式。 你也可以通过遍历你的文件列表来使用更好的循环。 下面是经过修正的代码:
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 =================");
            }
        }
    }

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

然后你将拥有一个包含所有所需文件的数组,而且只有它们。接下来,您可以测试数组是否为空,如果不为空,则处理这些文件。


请不要使用 <code>,请使用括号花括号图标或将代码缩进四个空格。 - Sean Patrick Floyd

0
如果你需要以 LAYER.EXE 开头的文件,那么你最好修改这个:
if (files == "LAYER.EXE.pf") 

翻译成:

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

请记住,在Java中用于字符串的==运算符的行为可能与您预期的不同。请使用equalsequalsIgnoreCase方法代替!

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

0
首先,在Java中进行字符串比较时,您需要使用.equals()而不是==,因为==只有在字符串是相同对象时才会评估为true,而不是比较字符串本身的值。
所以代码应该是:if(files.equals("LAYER.EXE.pf")) 其次,您应该使用.startsWith()函数来检查一个字符串的前几个字符是否与另一个字符串匹配。
所以,只需这样做:if(files.startsWith("LAYER.EXE")),你就可以了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接