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 に答える