最近做项目自己写文件上传和下载,用到了File、Paths、Path,其中出现了如下意外情况:
实例化Path:
Path path = Paths.get("E://souces/tmp/abc");
将此path作为入参:
test(path);
test方法内调用:
if(path.toFile().exists()){
System.out.print("file is exists");
// TODO 接收流并写入文件
}
输出:
file is exists
然而,在接下来以path作为目录将流写入文件(文件流会自动创建文件)时,抛错:文件路径不存在!
我去看了目录,这个路径确实不存在;但是有意思的是, path.toFile().exists() 返回的是 true.
这种问题让我很苦恼,后来我去看了File、Paths、Path这些类,但都没能找出原因,百度也未果,目前只能猜测这可能是有关内存和jvm中的一个未知bug。如果哪位大牛知道原因还望不吝赐教,笔者感激不尽。
然后偶只好放弃使用Path,直接传入路径字符串:
File file = new File(pathStr);
if(file.exists()){
System.out.print("file is exists");
// TODO 接收流并写入文件
}
然后这样做终于没问题了。
虽然coding已经结束,但是关于上述问题,“Paths实例得到文件对象(toFile()),调用exists()方法判断路径是否存在,执行结果错误”,我仍会保留疑问,期望各位大牛不吝解惑,谢谢。