【问题标题】:Maven exec:java : how to open and read a file in the resources directory?Maven exec:java:如何打开和读取资源目录中的文件?
【发布时间】:2011-05-16 22:59:20
【问题描述】:

这是我的项目的结构。

proj
  ---src
    ----main
        ----java
            ----Main.java
        ----resources
             ----res.txt

我在 Eclipse 中使用 m2eclipse 插件。 在 Main.java 中,我有

File f = new File("res.txt");  System.out.println(f.getAbsolutePath());

当我运行 mvn exec:java 时,打印出来的路径是“...\proj\res.txt”。如何让它在“...\proj\target\classes”目录中查找资源文件?

编辑:

感谢您回答我原来的问题。我有一个后续问题:

所以基本上我想做的是让主类读取“res.txt”,然后在资源目录中生成一个新的“newres.txt”,这样我就可以将这个新的“newres.txt”打包到之后打包阶段的jar文件。目前我将此 exec:java 安装到准备包阶段。如果没有硬编码的绝对路径或依赖于Maven的目录结构,我应该如何在资源目录中创建这个“newres.txt”?

【问题讨论】:

    标签: java maven


    【解决方案1】:

    我想我会回答我自己的问题,Thread.currentThread().getContextClassLoader().getResourceAsStream() 对我来说效果最好,尤其是当项目为另一个 Web 项目生成 jar 依赖项时。

    【讨论】:

    • 你是最棒的!谢谢你
    【解决方案2】:

    我会添加到答案中。

    你也可以使用:

    InputStream file = ClassLoader.getSystemResourceAsStream("res.txt");
    

    【讨论】:

    • 这解决了我的问题!非常感谢您花时间编写此解决方案!!!
    【解决方案3】:

    试试

    InputStream IS = Main.class.getResourceAsStream("res.txt");
    

    访问res.txt 的内容。注意文本文件的编码(注意默认值)。例如,如果您的 maven 项目设置为 UTF-8,请确保 res.txt 也以 UTF-8 编码,否则,您将在运行时遇到有趣的错误。

    【讨论】:

    【解决方案4】:

    当从 eclipse 运行时,res.txt 会在 eclipse 启动的文件夹中/reader 中创建。因此输出。

    如果您想让代码查看特定文件夹中的文件,该文件存在于您的类路径中,那么您应该尝试使用getResourceAsStream() 方法。

    您也可以指定文件的绝对路径。

    【讨论】:

      【解决方案5】:

      这是另一种解决方案:

      String str = "target/classes/res.txt";
      
      InputStream is = new FileInputStream(new File(str));
      

      如果您在根文件夹中执行java,并且您的资源将编译到target/classes 文件夹,您可以这样编写代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        • 2021-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多