gpt4 book ai didi

java - 查找错误 : Possible null pointer dereference warning

转载 作者:行者123 更新时间:2023-11-30 02:05:18 26 4
gpt4 key购买 nike

由于 findbugs 报告中被调用方法的返回值 [第 91 行],我在 ConvertMultiPartToFile(MultipartFile) 中得到了可能的空指针取消引用。

这是代码:

private File convertMultiPartToFile(MultipartFile file) throws IOException {
//line below is the line 91
if (file == null || file.getOriginalFilename() == null)
throw new InputValidationException("fileNameInvalid", i18n, file.getOriginalFilename());
File convFile = new File(file.getOriginalFilename());
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}

我已经检查了文件的空值,为什么我仍然收到警告?

更新1:

当我删除异常中的文件名后,下面一行仍然有警告。

private File convertMultiPartToFile(MultipartFile file) throws IOException {           
if (file == null || file.getOriginalFilename() == null)
throw new InputValidationException("fileNameInvalid", i18n, "");
File convFile = new File(file.getOriginalFilename()); // warning here
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}

更新2:

private File convertMultiPartToFile(MultipartFile file) throws IOException {
File convFile = null;
if (file != null && file.getOriginalFilename() != null) {
convFile = new File(file.getOriginalFilename()); //line 91
try (FileOutputStream fos = new FileOutputStream(convFile);) {
fos.write(file.getBytes());
}
}
return convFile;
}

改编@Michael Peacock的答案,警告仍然存在。

Possible null pointer dereference in convertMultiPartToFile(MultipartFile) due to return value of called method

Bug type NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE (click for details) In class com.corpobids.server.service.AwsAPIService In method convertMultiPartToFile(MultipartFile)

Local variable stored in JVM register ?

Method invoked at Service.java:[line 91]

Known null at Service.java:[line 91]

最佳答案

这里有几件事。首先,您需要保证要关闭 FileOutputStream。根据您使用的 JDK,此操作的完成方式有所不同。在 JDK 1.7 之前,您可以使用 finally block 来关闭 fos。从 JDK 1.7 开始,对资源使用 try。

此外,仅在有需要处理的情况下才继续进行文件处理。我还没有测试过这段代码,但这应该可以消除可能的 NPE。请注意我们如何翻转条件,以便在可以的情况下跳过处理文件。

JDK <= 1.6:

private File convertMultiPartToFileJDK16(MultipartFile file) throws IOException {           

File convFile = null;
FileOutputStream fos = null;

if (file != null && file.getOriginalFilename() != null) {
try {
String originalFilename = file.getOriginalFilename();
if (originalFilename != null) {
convFile = new File(originalFilename);
fos = new FileOutputStream(convFile);
fos.write(file.getBytes());

}
catch(IOException ex){
// handle IOException or rethrow it
}
finally {
fos.close();
}
}
return convFile;
}

JDK >= 1.7:

    private File convertMultiPartToFileJDK17(MultipartFile file) throws IOException {
File convFile = null;
if (file != null ) {

String originalFilename = file.getOriginalFilename();

if (originalFilename != null) {
convFile = new File(originalFilename);

try(FileOutputStream fos = new FileOutputStream(convFile);) {
fos.write(file.getBytes());
}
}
}
return convFile;
}

关于java - 查找错误 : Possible null pointer dereference warning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51540471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com