gpt4 book ai didi

java - 为什么 File.exists() 不起作用

转载 作者:行者123 更新时间:2023-12-02 02:18:47 25 4
gpt4 key购买 nike

我的项目的 src/main/resources 文件夹中有一个文件 watstheday.txt,如下图文件所示。

enter image description here

我通过 ClassLoadergetResourceAsStream() 方法读取文件,并在我的代码中执行进一步的操作,该代码运行良好。但是,如果我尝试通过以下代码检查文件是否存在,它总是返回 false。

try {
ClassLoader classLoader = getClass().getClassLoader();
System.out.println("!@#!@# so difficult to be simple..."+classLoader.getResource("watstheday.txt"));
//this returns false but the file is there
System.out.println("@#@ vertigo2 "+new File(classLoader.getResource("watstheday.txt").getFile()).isFile());
//this ALSO returns false but the file is there
System.out.println("@#@ vertigo2 "+new File(classLoader.getResource("watstheday.txt").getFile()).exists());
//Giving the / to mark the root of the application though that's not required
System.out.println("@#@ vertigo3 "+new File(classLoader.getResource("//watstheday.txt").getFile()).isFile());
//the below code with getResourceAsStream works absolutely fine and i can read the file
classLoader.getResourceAsStream("watstheday.txt");
BufferedReader buf = new BufferedReader(
new InputStreamReader(classLoader.getResourceAsStream("watstheday.txt")));
while (true) {
lineJustFetched = buf.readLine();
System.out.println(" @@#@ lineJustFetched =" + lineJustFetched);
}
buf.close();
} catch (Exception e) {
e.printStackTrace();
}

我咨询了following posts在最终提出这个问题之前,但找不到我做错了什么。当我打印文件名时,它会打印出完整的部署路径,如

!@#!@# so difficult to be simple... vfs=$my_server_deployment_folder_location$/helloworld/watstheday.txt

最佳答案

资源不是文件。当您开发(例如,在 IDE 中)并且尚未打包应用程序时,您可能会获得真实文件的路径(位于 src/main/resources 中的某个位置)。

但是,当应用程序打包时,资源就是存档中的条目。它们不再作为文件存在。因此,请勿将 File 与资源一起使用。

关于java - 为什么 File.exists() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48860434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com