我遇到了一个我似乎无法找到任何逻辑的错误.我有这个File对象,它是这样创建的:
File file = new File("utilities/data/someTextFile.txt");
Run Code Online (Sandbox Code Playgroud)
然后我做了file.exists()
,它返回false
(!?).如果找不到该文件,我正在登录f.getAbsolutePath()
文件.当我看路径时,似乎没问题.我可以将完整路径复制粘贴到Windows中的"运行"窗口,文件打开正常.
该文件始终存在,在我的应用程序运行期间不会被删除或更改.它位于本地机器上.
这似乎只在某些情况下发生.我可以随时重现故障,但我确信文件对象的路径不会因我为重现故障而采取的操作而改变.
什么可以导致file.exists()
返回虚假?这是否与权限或文件锁等有关?
Rom*_*nka 37
我在Windows 7上看到以下情况:
file.exists() == false
file.getAbsoluteFile().exists() == true
Run Code Online (Sandbox Code Playgroud)
有问题的文件是"var\log",绝对路径确实是指正常子目录(不是虚拟存储)中的现有文件.这可以从IDE中看到.
小智 16
似乎在Java中如何指定路径存在差异.
例如,如果文件路径被指定为file:/C:/DEV/test.txt
接着
File f = new File(filename);
f.exists();
Run Code Online (Sandbox Code Playgroud)
会回来的false
.该路径可能在资源管理器或浏览器中有效,但它是一个URL而不是绝对文件路径.
但另一方面,如果文件路径指定为C:/DEV/test.txt
那么
File f = new File(filename);
f.exists();
Run Code Online (Sandbox Code Playgroud)
将返回,true
因为路径不是URL,但它是绝对路径.
使用Spring Framework正是这样ResourceUtils.getFile(filename)
做的 - 其中name可以是URL或绝对文件路径.
小智 11
在我的案例中,上述答案并没有帮助.如上所述,我有:
file.exists() => false
file.getAbsoluteFile().exists => true
Run Code Online (Sandbox Code Playgroud)
造成这种情况的根本原因是Windows 7计算机所有者已经修改了CMD的注册表,因此它会自动运行命令以在特定目录中启动以使用Python.这个修改破坏了Java 1.6代码,它显然在Windows上使用CMD进行某些文件操作,例如.从注册表中删除自动运行解决了这个问题.exists()
小智 5
当选中[“隐藏已知文件类型的扩展名。”]时,在[资源管理器]/[运行窗口]中键入“t.txt”时,窗口会打开“t.txt.txt”,但以编程方式不会打开。
归档时间: |
|
查看次数: |
82204 次 |
最近记录: |