1

我的项目结构有点如下: /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,并且我想要对文件进行持续更改,我该如何组织我的代码库来执行此操作,和/或我需要在我的代码中进行哪些更改才能完成此操作?

4

1 回答 1

2

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

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

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

于 2013-03-21T11:24:28.813 回答