我正在使用此代码从文件中读取值。
public String getChassisSerialNumber() throws IOException
{
File myFile = new File("/sys/devices/virtual/dmi/id/chassis_serial");
byte[] fileBytes;
String content = "";
if (myFile.exists())
{
fileBytes = Files.readAllBytes(myFile.toPath());
if (fileBytes.length > 0)
{
content = new String(fileBytes);
}
else
{
return "No file";
}
}
else
{
return "No file";
}
return null;
}
我收到此错误:
java.nio.file.AccessDeniedException: /sys/devices/virtual/dmi/id/chassis_serial
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at java.nio.file.Files.readAllBytes(Files.java:3149)
我如何处理此错误?因为现在我的代码停止执行?有没有更好的方法不中断代码执行?
答案 0 :(得分:1)
调用它时,必须在getChassisSerialNumber()
内使用try-catch。 E.g。
try {
getChassisSerialNumber();
} catch (java.nio.file.AccessDeniedException e) {
System.out.println("caught exception");
}
OR
try {
fileBytes = Files.readAllBytes(myFile.toPath());
} catch (java.nio.file.AccessDeniedException e) {
return "access denied";
}
这样你的程序就不会终止。
对于干净的设计,如果你无法读取文件,你应该return null
(返回“魔术字符串如”无文件“或”拒绝访问“都不是好设计,因为你不能区分这个字符串是否来自文件)或捕获方法之外的异常(我的第一个例子)。
顺便说一下。只需将文件内容放入content
变量中即可将其返回(即将content = new String(fileBytes);
替换为return new String(fileBytes);
)
public String getChassisSerialNumber()
{
File myFile = new File("/sys/devices/virtual/dmi/id/chassis_serial");
if (myFile.exists())
{
byte[] fileBytes;
try {
fileBytes = Files.readAllBytes(myFile.toPath());
} catch (java.nio.file.AccessDeniedException e) {
return null;
}
if (fileBytes != null && fileBytes.length > 0)
{
return new String(fileBytes);
}
}
return null;
}
答案 1 :(得分:1)
您应该捕获异常而不是抛出异常。我认为您需要在方法 getChassisSerialNumber 的调用周围放置一个try-catch块。
这样的事情应该适合你的情况:
String result = null;
try {
result = getChassisSerialNumber();
} catch (java.nio.file.AccessDeniedException ex) {
// do something with the exception
// you can log it or print some specific information for the user
}
return result; // if the result is null, the method has failed
为了更好地了解这类事情,您应该查看this page