【问题标题】:Java find start of file name and extensionJava查找文件名和扩展名的开头
【发布时间】:2011-06-18 15:23:12
【问题描述】:

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

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

【问题讨论】:

    标签: java file find directory names


    【解决方案1】:
    files == "LAYER.EXE.pf"
    

    改成

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

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

    多说,这只会给你名称等于“LAYER.EXE.pf”的文件。

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

    【讨论】:

      【解决方案2】:

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

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

      进入:

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

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

      【讨论】:

        【解决方案3】:

        要检查一个字符串与另一个字符串,您不应使用“==”,而应使用 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 =================");
                    }
                }
            }
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

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

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

            【讨论】:

              【解决方案6】:

              您可以使用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");
                      }
                  }
              

              【讨论】:

                【解决方案7】:

                您可以使用 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"));  
                    }  
                });  
                

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

                【讨论】:

                • 请不要使用&lt;code&gt;,使用带有花括号的图标或将代码缩进四个空格
                【解决方案8】:

                如果您需要过滤文件名,请考虑使用文件名过滤器:

                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 的文件

                【讨论】:

                  猜你喜欢
                  • 2017-08-22
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-11-04
                  • 2012-03-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多