Доступ запрещен - получить свойства файла?

Я запускаю программу для отображения информации обо всех файлах, хранящихся в папке.

Я хочу получить свойства файла (для меня важнее размер файла, но я хотел бы получить и другие свойства, такие как дата изменения и т. Д.).

Моя проблема в том, что когда я попадаю в файл, который фактически используется другой программой, я не могу получить 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());
Другие вопросы по тегам