2015-10-12 2 views
0

Java вопрос.Определите, проиндексирован ли контент содержимого (в Windows) или нет?

Какой метод следует использовать, чтобы узнать, помечен ли файл Windows как индексированный контент или нет? Я попытался написать решение similair для Determine whether a file is a junction (in Windows) or not?, . Я хотел бы подчеркнуть, что следующий код был написан просто с учетом того, что метод .getClass(). GetDeclaredMethod имел «isIndexed» в качестве аргумента в соответствии с «isReparsePoint », однако это предположение оказывается неверным, поскольку следующий код всегда возвращается как false. Я решил оставить его на всякий случай, если кто-то знает правильную ссылку, которая бы соответствовала этому коду.

boolean isIndexed = false; 
if (DosFileAttributes.class.isInstance(attr)) { 
    try { 
     Method m = attr.getClass().getDeclaredMethod("isIndexed"); 
     m.setAccessible(true); 
     isIndexed = (boolean) m.invoke(attr); 
    } catch (Exception e) { 
     // just gave it a try 
    } 
} 

Вместо «isIndexed» в аргументе getDeclaredMethod Я также попытался использовать «isContentIndexed» и «isNotContentIndexed», все без каких-либо удовлетворительных результатов.

+0

Почему вы думаете, что метод с именем 'isIndexed 'существует? Я не вижу причин, чтобы это было? Где вы нашли документацию, что она существует? –

+0

Сначала вам нужно понять код, который вы копируете. Нет такого метода 'isIndexed', что по крайней мере объясняет, почему он не работает. Для второй части: единственное, что может быть, - использовать некоторые системные вызовы Windows через JNI, JNA и т. Д. – SubOptimal

+1

@DavidHeffernan. Я попробовал. – Alexay

ответ

0

Класс sun.nio.fs.WindowsFileAttributes класс не имеет способов сообщить, проиндексирован ли файл или нет. Вы можете, однако, вызвать метод attributes() для извлечения основной битовой маски атрибутов файлов, а затем проверьте FILE_ATTRIBUTE_NOT_CONTENT_INDEXED (0x2000) атрибут бит установлен или нет:

boolean isIndexed = false; 
if (DosFileAttributes.class.isInstance(attr)) { 
    isIndexed = true; 
    try { 
     Method m = attr.getClass().getDeclaredMethod("attributes"); 
     m.setAccessible(true); 
     int attrs = (int) m.invoke(attr); 
     isIndexed = ((attrs & 0x2000) == 0); 
    } catch (Exception e) { 
     // just gave it a try 
    } 
} 
+0

Как всегда, классы 'sun. *' Должны быть изменены без предварительного уведомления в будущих версиях Java. То же самое касается частных методов. – VGR

+0

Правда. Альтернативой является использование JNA для прямого вызова функций Win32 'GetFileAttributes()' или 'FindFirstFile()'. –

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