首页 > 解决方案 > 未找到 Maven 资源

问题描述

我想在 Maven 项目中包含一个文本文件。代码本身可以编译,但每次我尝试运行它时,无论是在 VS Code 中还是在命令行中,我都会得到:java.io.FileNotFoundException: The provided file path /lightdm-forum.txt does not exist.该文件位于 src/main/resources/,这是默认值。

代码片段:

    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();

        DataStream<Tuple2<String, Integer>> dataStream = env
                .readTextFile("/lightdm-forum.txt")
                .flatMap(new Splitter())
                .keyBy(0)
                .sum(1);

        dataStream.print();

        env.execute("Socket Stream WordCount");
    }

Maven 似乎可以识别该文件并将其复制到类路径根目录:

[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ WordCount_Stream ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource

编译后,目标文件夹中的结构如下所示:

.
├── classes
│   ├── com
│   │   └── lmu
│   │       └── WordCount_Stream
│   │           ├── WordCounter$Splitter.class
│   │           └── WordCounter.class
│   └── lightdm-forum.txt

所以文件已经被复制了,但是我尝试运行项目时却找不到。有任何想法吗?

标签: javamaven

解决方案


您使用/lightdm-forum.txtwhich is a path 作为全局路径。您可以尝试使用相对路径,如path/to/your/subfolder/or/fileor ../path/to/upper/folder/and/other/folders

也许更好的解决方案可能是使用类加载器,例如Thread.currentThread().getContextClassLoader().getResource(resourceName). 这样您就可以从 maven 资源包中加载文件(默认为 src/Main/resources,Van 也可以在 pom.xml 中自定义)

希望能帮助到你!


推荐阅读