java File.delete()无法删除文件,如果路径是自己提供的绝对路径,就可以删除

Zangse07 2015-12-23 02:28:56
我在项目中写了这样一个小方法,就是文件通过传入的参数来删除,由于文件夹是动态生成的,也需要传入文件夹的名称,可是我调用该方法时,query不能删除文件;
当我把路径E:\\Win8Program\\tomcat7\\webapps\\WeChat02\\News_Html\\201512\\newsp12231424016000000v.html放上去直接重启服务器,然后在执行该方法时,文件能被删除,百思不得其解,为什么传入的路径无法删除呢
public class DeleteHTMLFile {
/**
* @param id
* @return 该方法用于删除指定文件夹下的指定文件 1.得到完整的文件名 2.得到文件相对路径 3.找到文件的父文件夹的位置
* 4.查找比对该文件名的文件,并删除 5.若删除成功,返回true
*
*/
public static boolean delete(HttpServletRequest request, String id,
String ctime) {
boolean b = false;
// 需要删除的文件名
try {
String filename = "/news" + id + ".html";
String filePath = request.getServletContext().getRealPath(
"/News_Html");
// 得到文件存在的文件夹名
//取得创建时间的年月,就是文件夹名
String folder = ctime.replace("-", "").substring(0, 6);
//拼接文件所在目录的完整路径
String allPath = filePath + "/" + folder;
System.out.println("文件路径" + filePath);
//得到整个文件的路径
String filePathAndName = allPath + filename;
System.out.println("文件的路径===" + filePathAndName);
//对反斜杠进行转换
String newfilePath = filePathAndName.replace("\\", "/");
System.out.println("将要删除的文件" + newfilePath);
//再次转换成双反斜杠
String realPath = newfilePath.replace("/", "\\\\");
System.out.println("最终删除路径" + realPath);
//删除部分
File myDelFile = new File(realPath);
//判断文件是否存在
if (myDelFile.exists()) {
b = myDelFile.delete();
}
if (b) {
System.out.println("删除文件成功");
} else {
System.out.println("删除文件出错");
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("删除文件出错");
e.printStackTrace();
}

return b;
}


这是控制台打印
文件路径E:\Win8Program\tomcat7\webapps\WeChat02\News_Html
文件的路径===E:\Win8Program\tomcat7\webapps\WeChat02\News_Html/201512/newsp12231424016000000v.html
将要删除的文件E:/Win8Program/tomcat7/webapps/WeChat02/News_Html/201512/newsp12231424016000000v.html
最终删除路径E:\\Win8Program\\tomcat7\\webapps\\WeChat02\\News_Html\\201512\\newsp12231424016000000v.html
删除文件出错


换了之后
File myDelFile = new File("E:\\Win8Program\\tomcat7\\webapps\\WeChat02\\News_Html\\201512\\newsp12231424016000000v.html");

信息: Server startup in 5121 ms
文件路径E:\Win8Program\tomcat7\webapps\WeChat02\News_Html
文件的路径===E:\Win8Program\tomcat7\webapps\WeChat02\News_Html/201512/newsc12211913149560001u.html
将要删除的文件E:/Win8Program/tomcat7/webapps/WeChat02/News_Html/201512/newsc12211913149560001u.html
最终删除路径E:\\Win8Program\\tomcat7\\webapps\\WeChat02\\News_Html\\201512\\newsc12211913149560001u.html
删除文件成功

前面的打印语句可以忽略,后面的是提示删除了,去文件夹里看,也确实是删除了
...全文
3335 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Of Chen 2017-08-16
  • 打赏
  • 举报
回复
引用 10 楼 u011398388 的回复:
[quote=引用 6 楼 u011376884 的回复:] 也有可能是那个文件被进程占用了吧
的确是被占用了,谢谢[/quote] 被占用后,我把Tomcat的关掉,再去删除,居然删掉了,那我要是上线了的项目要如何杀掉进程去删文件呢?
  • 打赏
  • 举报
回复
引用 8 楼 u011398388 的回复:
[quote=引用 7 楼 mymy1026 的回复:] 如果控制台没有打印任何异常信息,只有一种可能,就是文件不存在,文件不存在有两种可能:1、指定目录文件不存在或尚未生成;2、路径有问题。顺便说一下加上下面代码更清晰
if (myDelFile.exists()) {
                b = myDelFile.delete();
            }else{
   打印文件不存在
}
我加了这句,文件的确存在,就是无法删除[/quote] 文件被占用会抛出异常信息的
Zangse07 2015-12-23
  • 打赏
  • 举报
回复
引用 6 楼 u011376884 的回复:
也有可能是那个文件被进程占用了吧
的确是被占用了,谢谢
Zangse07 2015-12-23
  • 打赏
  • 举报
回复
问题已解决,主要是自己太不小心了,在另一个工具类里创建了文件,但是没有关闭writer流,谢谢各位的帮忙
Zangse07 2015-12-23
  • 打赏
  • 举报
回复
引用 7 楼 mymy1026 的回复:
如果控制台没有打印任何异常信息,只有一种可能,就是文件不存在,文件不存在有两种可能:1、指定目录文件不存在或尚未生成;2、路径有问题。顺便说一下加上下面代码更清晰
if (myDelFile.exists()) {
                b = myDelFile.delete();
            }else{
   打印文件不存在
}
我加了这句,文件的确存在,就是无法删除
  • 打赏
  • 举报
回复
如果控制台没有打印任何异常信息,只有一种可能,就是文件不存在,文件不存在有两种可能:1、指定目录文件不存在或尚未生成;2、路径有问题。顺便说一下加上下面代码更清晰
if (myDelFile.exists()) {
                b = myDelFile.delete();
            }else{
   打印文件不存在
}
  • 打赏
  • 举报
回复
也有可能是那个文件被进程占用了吧
  • 打赏
  • 举报
回复
引用 4 楼 u011398388 的回复:
[quote=引用 3 楼 u011376884 的回复:] 你打印一下myDelFile.exists() 可能判断文件不存在吧?
恩,判断了的,文件是存在的[/quote] 试试 myDelFile.getAbsoluteFile().delete();
Zangse07 2015-12-23
  • 打赏
  • 举报
回复
引用 3 楼 u011376884 的回复:
你打印一下myDelFile.exists() 可能判断文件不存在吧?
恩,判断了的,文件是存在的
  • 打赏
  • 举报
回复
你打印一下myDelFile.exists() 可能判断文件不存在吧?
Zangse07 2015-12-23
  • 打赏
  • 举报
回复
引用 1 楼 github_33462261 的回复:
兄弟啊,你既然想使用相对路径,那也得把相对路径写对啊,\WeChat02是你的项目吧,那web项目相对路径是/News_Html/....
我修改了下,我之前是把那个反斜杠加在
String allPath = filePath+"/" + folder;
,修改了之后,还是有错误,我的路径是取出来了的,控制台上打印输出的就是取出来的路径
github_33462261 2015-12-23
  • 打赏
  • 举报
回复
兄弟啊,你既然想使用相对路径,那也得把相对路径写对啊,\WeChat02是你的项目吧,那web项目相对路径是/News_Html/....

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧