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
?如果没有。尝试在单独的程序中执行提供的代码。如果它有效,那么最可能的原因是代码中的逻辑错误。