2013-08-09 4 views
1

Я использую этот код для его проверки;File.canExecute() говорит, что каждый файл является исполняемым?

public class CanExecuteTest { 
    public static void main (String[] args) { 
     File currentDir = new File(System.getProperty("user.dir")); 
     traverse(currentDir); 
    } 

    public static void traverse(File dir) { 
     String[] filesAndDirs = dir.list(); 
     for (String fileOrDir : filesAndDirs) { 
      File f = new File(dir, fileOrDir); 
      if (f.isDirectory()) { 
       traverse(f); 
      } else { 
       System.out.print(f); 
       if (f.canExecute()) { 
        System.out.println(" can execute"); 
       } else { 
        System.out.println(" cannot execute"); 
       } 
      } 
     } 
    } 
} 

Это означает, что каждый файл является исполняемым файлом. Я здесь что-то не так, или это ошибка Java? Я на Windows 7, Netbeans 7.3.1 и Java 7.

+4

Может выполняться не означает, что он будет выполняться, только чтобы ваши разрешения позволили вам выполнить этот файл. В каком-то смысле это похоже на гриб, и спросить: «Можно есть?» Ответ был бы «да», независимо от того, какой гриб вы указываете, хотя для некоторых грибов, которые отвечают, будет означать, что вы можете съесть его только один раз. – dasblinkenlight

ответ

1

canExecute() не испытывает для executability, он проверяет, является ли текущая программа (то есть ваши) разрешено для его выполнения. Например, если вы изменили разрешения одного из файлов на 000 (без чтения, записи или выполнения любым пользователем), canExecute(), вероятно, вернет значение false, поскольку у JVM не будет разрешения для выполнения (или чтения) файла ,

Если вы хотите проверить исполняемые файлы, возможно, вы можете создать метод, который анализирует файлы для их суффикса и возвращает true, когда он находит .exe (или .app в OS X).

+1

Обратите внимание, что проверка суффиксов будет работать только для операционных систем, которые заботятся о расширениях файлов (например, не в каких-либо операционных системах * nix). – Aurand

+0

Да, я должен был это отметить. Для системы Linux или * BSD вам понадобится другой тест. –

0

CanExecute()

тесты, может ли приложение выполнить файл, обозначенный этим абстрактным путем. Возвращает: истинно тогда и только тогда, когда абстрактный путь существует, и приложение может выполнить файл

Смежные вопросы