通常来说:java file.delete()方法删除文件失败的原因有以下几个:
1、极有可能是文件的流没有关闭(我遇到的就是没有关闭文件的输入流);
2、被别的进程引用,可以手工删除试试(如果删除不了就证明被别的进程正在引用);
3、file是文件夹,而且不为空,file文件夹里还有别的文件夹或者是文件。
我的代码如下:
readTemplateFileContent()这个方法用来读取模板文件的内容,用到了流资源,但是用完之后没有关闭,导致删除文件失败;
@Override
public TemplateFile findByPath(String path) {
File file = new File(path);
if (!file.exists()) {
throw new SystemException("模板不存在请检查!");
}
String parentPath = null;
String[] fileParent = file.getParent().split("templates");
if (fileParent.length == 1){
parentPath = File.separator;
}else {
parentPath = fileParent[1];
}
TemplateFile templateFile = new TemplateFile();
templateFile.setFileName(file.getName());
templateFile.setFilePath(file.getAbsolutePath());
templateFile.setParentPath(parentPath);
// 这里是读取文件的内容,用到了下面写的方法,方法内有读写的文件流
templateFile.setContent(this.readTemplateFileContent(file));
return templateFile;
}
@Override
public String readTemplateFileContent(File file) {
ByteArrayOutputStream bos = null;
InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
bos = new ByteArrayOutputStream();
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
} catch (Exception e) {
throw new SystemException(e.getMessage());
} finally {
try {
if (bos != null) {
bos.close();
}
} catch (IOException e) {
log.error("读取模板失败");
}
// 当时删除不成功的原因就是没有下面的try...catch代码块,inputStream没有关闭
try {
inputStream.close();
} catch (IOException e) {
log.error("读取模板失败, {}", e);
}
}
try {
return new String(bos.toByteArray(), "utf-8");
} catch (UnsupportedEncodingException e) {
log.error("读取模板失败");
}
return "";
}