2015-11-17 3 views
3

Я использую следующий код, чтобы проверить, существует ли файл и может быть прочитан в Java:Подробная информация о файле.exists() в Java?

File sourceFile = new File(sourcePath); 
if (!sourceFile.exists() || !sourceFile.canRead()) 
    throw new Exception("Source file is not accessible."); 

Однако вопрос, который я хочу, чтобы решить это определение более зернистую подробно о почему существует() может или не может возвращать false. Например, местоположение может быть доступно, но файл не существует. Или местоположение может быть заблокировано брандмауэром, и файл существует, просто не доступен.

Есть быстрый способ сделать определение между:

  • местоположение файла не доступен (брандмауэр, безопасность и т.д.)
  • Местоположение доступен, но файл d.n.e.
  • Файл существует, но чтение не предоставляется.

Спасибо!

ответ

4

С File вы не можете.

С Path, вы можете:

thePath.getFileSystem().provider().checkAccess(thePath) 

javadoc link.

+0

Похоже, этот класс может предоставить детали я ищу. – Paul

+0

try { Путь thePath = FileSystems.getDefault(). GetPath (sourcePath); thePath.getFileSystem(). Provider(). CheckAccess (thePath, AccessMode.READ); } \t \t \t \t \t \t улов (NoSuchFileException EX1) { бросить новый Exception ("Исходный файл не существует."); } улов (FileSystemException ех2) {\t \t \t \t \t \t \t // Пример: Сетевой путь не был найден. throw new Exception («Исходный файл недоступен:» + ex2.getReason()); \t \t \t \t \t \t \t } поймать (Exception ех) { бросить новый Exception ("Неизвестное исключение:" + ex.getMessage()); } – Paul

+0

Это то, с чем я закончил. Питает в обработчик исключений моей программы, но с более подробной информацией. – Paul

0

ниже существует метод и метод checkRead код:

 public boolean exists() { 
     SecurityManager security = System.getSecurityManager(); 
     if (security != null) { 
      security.checkRead(path); 
     } 
     return ((fs.getBooleanAttributes(this) & FileSystem.BA_EXISTS) != 0); 
    } 

    public void checkRead(FileDescriptor fd) { 
     if (fd == null) { 
      throw new NullPointerException("file descriptor can't be null"); 
     } 
     checkPermission(new RuntimePermission("readFileDescriptor")); 
    } 

существует метод выполнения проверки файла для чтения.

пожалуйста, обратитесь к следующей ссылке, чтобы доступ на чтение к данному файлу, используя SecurityManager

https://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html

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

  • Нет связанных вопросов^_^