Java问题。
我应该使用什么方法来确定Windows文件是否标记为已编入索引的内容?我试图为Determine whether a file is a junction (in Windows) or not?写一个解决方案similair,我想强调的是,下面的代码只是假设.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 :(得分: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
}
}