pet*_*ter 8 java java-native-interface winapi jna
我正在编写Java 6应用程序,我必须检查文件是否可读.但是,在Windows上canRead()总是返回true.所以我看到可能,唯一的解决方案可能是基于WINAPI并用JNA/JNI编写的一些本机解决方案.
但是,还有另一个问题,因为在WINAPI中很难找到一个简单的函数,它会返回有关文件访问的信息.我发现GetNamedSecurityInfo或者GetSecurityInfo我不是一个先进的WINAPI程序员,他们对我来说对JNA/JNI来说太复杂了.任何想法如何处理这个问题?
尝试使用以下代码
public boolean checkFileCanRead(File file){
try {
FileReader fileReader = new FileReader(file.getAbsolutePath());
fileReader.read();
fileReader.close();
} catch (Exception e) {
LOGGER.debug("Exception when checking if file could be read with message:"+e.getMessage(), e);
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
你可以用这种方式使用FilePermission和AccessController更强硬:
FilePermission fp = new FilePermission("file.txt", "read");
AccessController.checkPermission(fp);
Run Code Online (Sandbox Code Playgroud)
如果允许访问请求,checkPermission将安静地返回.如果被拒绝,则抛出AccessControlException.
Java 7引入了Files.isReadablestatic方法,它接受一个文件Path,如果文件存在并且可读,则返回true,否则返回false。
测试文件是否可读。此方法检查文件是否存在,以及此Java虚拟机是否具有适当的特权,以使其可以打开文件进行读取。根据实现的不同,此方法可能需要读取文件许可权,访问控制列表或其他文件属性,以检查对文件的有效访问。因此,相对于其他文件系统操作,此方法可能不是原子的。
请注意,此方法的结果立即过时,不能保证随后尝试打开该文件以进行读取的尝试将成功(甚至无法访问同一文件)。在对安全敏感的应用程序中使用此方法时应小心。
例:
File file = new File("/path/to/file");
Files.isReadable(file.toPath()); // true if `/path/to/file` is readable
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18603 次 |
| 最近记录: |