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

时间:2011-01-31 14:44:48

标签: java file find directory names

HI, 我几乎已经解决了这个问题但现在已经卡住了!我需要做的是查看一个文件夹说..

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 个答案:

答案 0 :(得分:6)

files == "LAYER.EXE.pf"

更改为

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

你所做的是参考比较,你需要平等。阅读更多here

告诉你更多,这只会给你名字等于“LAYER.EXE.pf”的文件。

尝试files.startsWith("LAYER.");

答案 1 :(得分: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");
        }
    }

答案 2 :(得分: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

答案 3 :(得分:0)

如果您需要以LAYER.EXE开头的文件,那么最好更改一下:

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

分为:

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

请记住,Java中字符串的==运算符不会像您期望的那样运行。改为使用equalsequalsIgnoreCase方法!

答案 4 :(得分: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 =================");
            }
        }
    }

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

那就是 if(files.equal("LAYER.EXE.pf"))"

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

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

答案 7 :(得分: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"));  
    }  
});  

在那里你将拥有一个包含你需要的所有文件的数组,只有它们。接下来,您可以测试数组是否无效以及是否处理文件。