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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么File.exists()不起作用相关的知识,希望对你有一定的参考价值。

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

enter image description here

我通过getResourceAsStream()ClassLoader方法读取文件,并在我的代码中执行进一步的操作,这是完美的。但是,如果我尝试通过以下代码检查文件是否存在,则它总是返回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与资源一起使用。

以上是关于为什么File.exists()不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 C 代码片段不起作用?简化版可以。为 unsigned long long 传递不带 VA_ARGS 的 args

java代码在片段活动中不起作用

Javascript代码片段在drupal中不起作用

替换或删除后台堆栈上现有片段的代码不起作用

片段 getActivity 不起作用

从父片段到选项卡片段的接口侦听器不起作用