我的项目结构如下:
    / src / main / java
       Main.java
    / src / main / resources
       data.txt

现在,在Main.java中,我有类似以下内容:

ClassLoader classLoader = new TestMain().getClass().getClassLoader();
String url = classLoader.getResource("data.txt").toString();
File file =new File(url.split(":")[1]);

//check if file exists, and reads current content:
System.out.println("File exists: " + file.exists());
System.out.println(IOUtils.toString(new FileInputStream(file)));

//Now write some more data to this file:
FileWriter fileWritter = new FileWriter(file,true);
BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
bufferWritter.write("some more text");
bufferWritter.close();


现在上面的代码运行正常...并且,在每次迭代中,当我们读取文件时,我们可以看到实际上,多余的文本已附加到文件中。

但是:当我查看/ src / main / resource中的文件时,看不到任何更改。而且,如果我更改/更新此文件,则所有以前的修改都将被删除。

因此,我的问题是:如果我有一个要存储在类路径中的文件,例如data.txt,并且希望对文件进行不断的更改,那么如何组织我的代码库来做到这一点,和/或我需要在代码中进行哪些更改才能实现此目的?

最佳答案

我怀疑您会发现数据实际上在bin目录(或将输出设置为的位置)中已更改。

我希望构建过程将编译您的源代码并将资源复制到其他目录,然后从那里运行它。不仅仅是打印出文件是否存在,而是打印出文件本身,我怀疑您会发现它不在src中。

请注意,您当前的方法很脆弱,例如,如果资源位于jar文件中,则该资源将不可写。通常,最好将类路径上的资源视为只读资源。

09-10 01:42
查看更多