Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拒绝访问-是否获取文件的属性?_Java_File Io_Properties_Access Denied - Fatal编程技术网

Java 拒绝访问-是否获取文件的属性?

Java 拒绝访问-是否获取文件的属性?,java,file-io,properties,access-denied,Java,File Io,Properties,Access Denied,我正在运行一个程序,列出文件夹中存储的所有文件的信息 我想获得文件的属性(对我来说最重要的是文件大小,但我也想获得其他属性,如修改日期等) 我的问题是,当我访问另一个程序实际使用的文件时,我无法获取文件的基本文件属性。我尝试使用文件,URL,随机文件访问,但所有这些都需要打开文件,并引发异常,如: java.io.FileNotFoundException:C:\pagefile.sys(访问被拒绝) java中是否有获取此属性的选项?我不喜欢使用任何额外的库,以保持应用程序的小规模 该应用程序

我正在运行一个程序,列出文件夹中存储的所有文件的信息

我想获得文件的属性(对我来说最重要的是文件大小,但我也想获得其他属性,如修改日期等)

我的问题是,当我访问另一个程序实际使用的文件时,我无法获取文件的
基本文件属性。我尝试使用
文件
URL
随机文件访问
,但所有这些都需要打开文件,并引发异常,如:

java.io.FileNotFoundException:C:\pagefile.sys(访问被拒绝)

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;        
}

这对我来说很好:

File temp = new File("c:\\pagefile.sys");
System.err.println(temp.length());
System.err.println(temp.lastModified());
如果该方法返回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

你能展示你正在使用的代码吗?可能您无意中试图写入只读文件。请尝试调用
fis.exists()
fis.isFile()
fis
初始化之后。它们是否都返回
true
?@MockerTim:no,它们都返回false。我对其他受系统保护的文件(如ntldr)没有问题,但这个文件无法解析为常规文件。我可以通过Total Commander查看文件的大小和属性。将
file.toString()
值打印到
System.out
。它有正确的文件路径吗?将结果添加到您的帖子中。对,它返回空值。我修复了
fis=新文件(File.toString)
fis=新文件(File.toabsolutionpath().toString())
file.toabsolutionPath().toString()
返回我
C:\pagefile.sys
。但结果长度仍然是0。它只为我打印“0”。我还想获得另一个程序使用的文件大小(如Excel使用的一些.xls文件)。路径正确,该文件存在于我的硬盘上。我只对系统保护的文件(C:\pagefile.sys和floder“系统卷信息”)有问题。现在可以访问其他文件(甚至是其他程序使用的文件)。Windows阻止我查看此文件夹的任何选项,所以我现在在想,这在java中是可能的。@filipbe现在是否返回
true
?如果没有。尝试在单独的程序中执行提供的代码。如果它有效,那么最可能的原因是代码中的逻辑错误。