写入资源文件Java吗?

时间:2018-07-20 16:21:19

标签: java maven file resources

我正在尝试将数据动态写入Java中的资源文件,但似乎无法成功。有可能吗?我尝试了几种方法,但是都没有用。

我有一个主要方法代表:

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

    ClassLoader loader = ClassLoader.getSystemClassLoader();
    File file = new File(loader.getResource("authors/authors.log").getFile());

    FileWriter writer = new FileWriter(file);
    System.out.println(file.getAbsolutePath());

    writer.write("Test test \n");

    writer.flush();

    System.out.println(file.getAbsolutePath());

    writer.write("Test 2");

    writer.flush();
    writer.close();

}

执行main方法后,不会引发异常,但是authors.log文件似乎没有更改,也没有写入任何数据。

文件为:

  

src / main / java / main / Main.java

     

src / main / resource / authors / authors.log

     

target / classes / authors / authors.log

但是,目标目录包含一个authors.log文件,所有数据都写入那里。 我在某个地方错了吗,或者只是Java不允许写入资源文件? 如果是这样,最好是在哪里存储由程序更改的文件(例如日志文件)

1 个答案:

答案 0 :(得分:3)

  

但是目标目录包含一个authors.log文件和所有   数据写在那里。

由于它是您打开和修改的文件,因此非常值得期待。

以下语句使用类加载器来检索文件而不是文件系统:

File file = new File(loader.getResource("authors/authors.log").getFile());

因此它将检索位于target/classes的文件,而不是位于src/main/resources的文件。

通过指定当前工作目录的相对路径来使用文件系统,以能够更改src/main/resources的内容:

例如:

File file = new File("src/main/resources/authors/authors.log");

或者使用java.nio API更好:

Path file = Paths.get("src/main/resources/authors/authors.log");

  

如果是这样,最好的地方是存储由   程序(例如日志文件)

除了技术问题之外,您应该想知道为什么您的应用程序需要修改源代码。仅在非常特殊的情况下才可以这样做。
例如,日志文件不必位于源代码中,它们必须位于源代码项目之外,因为它们不属于应用程序源代码,并且也不是构建应用程序的工具。