为什么File文件调用delete方法返回false?
因为该文件路径有IO流在占用,想必是没有规范关闭IO流引起。
private static boolean deleteFile(File file){
File[] files = file.listFiles();
for(File deleteFile : files){
if(deleteFile.isDirectory()){
//如果是文件夹,则递归删除下面的文件后再删除该文件夹
if(!deleteFile(deleteFile)){
//如果失败则返回
return false;
}
} else {
if(!deleteFile.delete()){
//(一直失败)如果失败则返回
return false;
}
}
}
return file.delete();
}
/**
* 将本地文件上传至fastdfs服务器
*/
public static FDSFileWrapper uploadFile(String savePath,String fileName,Map<String,String> metaPairs) throws Exception{
FileInputStream fis = new FileInputStream(new File(savePath + File.separator + fileName));
byte[] bytes = new byte[fis.available()];
fis.read(bytes);
List<NameValuePair> metas = new ArrayList<NameValuePair>();
metas.add(new NameValuePair("fileName",fileName));
if(metaPairs != null && !metaPairs.isEmpty()) {
for(Entry<String, String> entry:metaPairs.entrySet()) {
NameValuePair pair = new NameValuePair(entry.getKey(), entry.getValue());
metas.add(pair);
}
}
String extName = fileName.substring(fileName.lastIndexOf(".") + 1);
FDSGlobalConfig fdsConfig = new FDSGlobalConfig();
fdsConfig = applicationContext.getBean(FDSGlobalConfig.class);
StorageClientWithGroup client = new StorageClientWithGroup(fdsConfig);
String indexName = client.uploadFileExt(fdsConfig.getGroupName(), bytes, extName, metas.toArray(new NameValuePair[metas.size()]));
FDSFileWrapper wrapper = new FDSFileWrapper();
wrapper.setHttpUrl(fdsConfig.getOpenHttpUrl() + indexName);
wrapper.setIndexName(indexName);
wrapper.setOrginalName(fileName);
// 下面忘记关闭了,补上
if (fis != null) {
fis.close();
}
return wrapper;
}