Доступ запрещен - получить свойства файла?
Я запускаю программу для отображения информации обо всех файлах, хранящихся в папке.
Я хочу получить свойства файла (для меня важнее размер файла, но я хотел бы получить и другие свойства, такие как дата изменения и т. Д.).
Моя проблема в том, что когда я попадаю в файл, который фактически используется другой программой, я не могу получить BasicFileAtrributtes
файла. Я пытался использовать File
, URL
, RandomFileAcces
, но все эти реквизиты открывают файл и выдают Exception вроде:
java.io.FileNotFoundException: C:\pagefile.sys (Access is denied)
Есть ли вариант в Java, чтобы получить эти свойства? Я предпочитаю не использовать никаких дополнительных библиотек, чтобы сохранить небольшой размер приложения.
Приложение основано на Java JRE7.
я использую java.nio.file.SimpleFileVisitor
посетить все файлы. Вот фрагмент моего кода, где я получил ошибку:
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc){
FileInfo temp=new FileInfo(new FileInfo().repairName(file.toString()));
temp.isLeaf=true;
temp.fName=temp.fName.replace(strIn, "");
File fis=null;
try {
fis=new File(file.toAbsolutePath().toString());
if(fis.exists())
System.out.println("exists");
if(fis.isFile())
System.out.println("isFile");
System.out.println(file.toAbsolutePath().toString());
temp.fSize=new BigInteger(new Long(fis.length()).toString());
} catch(Exception e){
e.printStackTrace();
}
node.add(temp, true);
FileListCreator.jProgressBar.setValue(++count);
return CONTINUE;
}
2 ответа
Если метод java.io.File.exists() возвращает false, и файл C:\pagefile.sys
существует в вашей файловой системе, вы указали неверный путь к файлу.
Следующий код работает на моей машине:
package q10025482;
import java.io.File;
public class TestFile {
public static void main(String[] args) {
String fileName = "C:/System Volume Information";//"C:/pagefile.sys"
File file = new File(fileName);
System.out.println("\nFile " + file.getAbsolutePath() + " info:");
System.out.println("Exists: " + file.exists());
System.out.println("Is file: " + file.isFile());
System.out.println("Is dir: " + file.isDirectory());
System.out.println("Length: " + file.length());
System.out.println();
}
}
Вот результат вывода:
File C:\System Volume Information info:
Exists: true
Is file: false
Is dir: true
Length: 24576
Это прекрасно работает для меня:
File temp = new File("c:\\pagefile.sys");
System.err.println(temp.length());
System.err.println(temp.lastModified());