Java найти начало имени файла и расширения - PullRequest
4 голосов
/ 31 января 2011

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 ]

6 голосов
/ 31 января 2011
files == "LAYER.EXE.pf"

изменить на

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

Что вы делаете, это сравнительное сравнение, и вам нужно равенство.Подробнее здесь .

Более того, это даст вам только те файлы, имя которых равно "LAYER.EXE.pf".

Попробуйте files.startsWith("LAYER.");

3 голосов
/ 31 января 2011

Вы можете использовать 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 голос
/ 31 января 2011

Если вам нужно отфильтровать имена файлов, рассмотрите возможность использования фильтра имен файлов:

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

0 голосов
/ 31 января 2011

Вы можете использовать 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"));  
    }  
});  

И там у вас будет массив со всеми необходимыми файлами и только ими.Далее вы можете проверить, является ли массив недействительным, а если нет, обрабатывать файлы.

0 голосов
/ 31 января 2011

Прежде всего, для сравнения строк в Java вам нужно сделать .equals() вместо ==, так как == на самом деле будет иметь значение true, только если строки - один и тот же объект, вместо сравнения значенийсами строки.

Так что это будет if(files.equal("LAYER.EXE.pf"))"

Во-вторых, вы должны использовать функцию .startsWith(), чтобы проверить, соответствуют ли первые символы строки другой строке

Так что, просто сделайте if(files.startsWith("LAYER.EXE")) и у вас все будет хорошо

0 голосов
/ 31 января 2011

Вы хотите сравнить имена файлов, используя одно из сравнений строк, вероятно, files.startsWith("LAYER.EXE.pf"). equals() (в данном случае) возвращает true, только если два объекта являются одним и тем же экземпляром.

0 голосов
/ 31 января 2011

Для проверки строки на другую не следует использовать «==», а использовать метод 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 =================");
            }
        }
    }
0 голосов
/ 31 января 2011

Если вам нужны файлы, начинающиеся с LAYER.EXE, вам лучше изменить это:

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

В:

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

Имейте в виду, что оператор == для строк в Java не будет работать так, как вы могли бы ожидать. Вместо этого используйте equals или equalsIgnoreCase методы!

...