读取文件时出现java.nio.file.AccessDeniedException

时间:2014-08-17 12:29:00

标签: java

我想使用以下代码阅读文件内容:

String content = new String(Files.readAllBytes(Paths.get("/sys/devices/virtual/dmi/id/chassis_serial")));

在某些系统上,此文件不存在或为空。我怎么抓住这个例外?我想在没有文件且没有值的情况下打印消息“No file”。

3 个答案:

答案 0 :(得分:2)

只有在使用新文件API 时才能抛出AccessDeniedException。使用inputStream打开源文件中的流,以便捕获该异常。

尝试使用此代码:

try 
 {
  final InputStream in = new Files.newInputStream(Path.get("/sys/devices/virtual/dmi/id/chassis_serial"));
 } catch (FileNotFoundException ex) {
   System.out.print("File not found");
 } catch(AccessDeniedException e) {
   System.out.print("File access denied");
 }

答案 1 :(得分:0)

尝试使用过滤器file.canRead())来避免任何访问异常。

答案 2 :(得分:-1)

创建一个File对象并检查它是否存在。 如果确实如此,那么将该文件转换为字节数组是安全的,并检查大小是否大于0.如果它将其转换为字符串。我在下面添加了一些示例代码。

File myFile = new File("/sys/devices/virtual/dmi/id/chassis_serial");
byte[] fileBytes; 
String content = "";
if(myFile.exists()) {
    fileBytes = File.readAllBytes(myfile.toPath);
    if(fileBytes.length > 0) content = new String(fileBytes);
    else System.out.println("No file");
else System.out.println("No file");

我知道这不是你要找的那个班轮。另一种选择就是

try {
    String content = new String(Files.readAllBytes(Paths.get("/sys/devices/virtual/dmi/id/chassis_serial")));
} catch(Exception e) {
    System.out.print("No file exists");
}

阅读像MrTux建议的try catch blocks here,以及java File和java io here