ここに、トレースを提案したソリューションを示すサンプルアプリケーションがあります。
開き、
サンプルアプリケーションは、アプリケーションとパッケージ化リソースからデータを読み込み、アプリケーションディレクトリ内のローカルファイルにそれを保存します、そのファイルをパッケージ化ファイルから新しいファイルを作成します( `.FileEditor 'という名前)をユーザのホームディレクトリ内に作成します。ユーザーは、テキストエディタでテキストを編集し、変更されたテキストをローカルファイルに保存することができます。次にアプリケーションを実行すると、パッケージ化されたリソースのテキストではなく、変更されたテキストが読み込まれ、使用されます。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
public class FileEditor extends Application {
private static final Path USER_FILE_PATH = Paths.get(
System.getProperty("user.home"),
".FileEditor"
);
private static final String SOURCE_FILE_NAME = "xyzzy.txt";
@Override
public void start(Stage stage) throws Exception {
if (!Files.isDirectory(USER_FILE_PATH)) {
Files.createDirectory(USER_FILE_PATH);
}
Path editableFilePath = Paths.get(USER_FILE_PATH.toString(), SOURCE_FILE_NAME);
if (!Files.exists(editableFilePath)) {
Files.copy(
FileEditor.class.getResourceAsStream(SOURCE_FILE_NAME),
editableFilePath
);
}
String text = Files.readAllLines(
editableFilePath
).stream()
.collect(Collectors.joining("\n"));
TextArea textArea = new TextArea(text);
MenuItem save = new MenuItem("Save...");
save.setOnAction(event -> {
try {
Files.write(editableFilePath, textArea.getText().getBytes());
} catch (IOException e) {
e.printStackTrace();
}
});
MenuItem exit = new MenuItem("Exit");
exit.setOnAction(event -> stage.hide());
MenuBar menuBar = new MenuBar(
new Menu("File", null, save, exit)
);
BorderPane layout = new BorderPane();
layout.setTop(menuBar);
layout.setCenter(textArea);
Scene scene = new Scene(layout);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
サンプルソースリソースxyzzy.txt
、FileEditor.javaコードと同じディレクトリに入れ、ビルドシステムによってリソース出力およびパッケージングディレクトリにコピー:
You are in a maze of twisty passages, all alike.
xyzzy
You are inside the building.

このサンプルでは、JavaFXアプリケーション内でTextAreaを使用してファイルを編集しますが、デフォルトのシステムテキストエディタでは、構造を使用して簡単に開くことができます。
getHostServices().showDocument(
editableFilePath.toUri().toURL().toExternalForm()
);
リソースuriを 'File'にラップしてもファイルにはなりません。リソースファイルがjarの中にあり、エディタがファイルを期待している場合、ファイルにアクセスすることはできません。リソースとしてファイルにアクセスできるようにするために私が知っている唯一のアプローチは、リソースの内容をファイルにコピーすることです。 – fabian
パッケージファイルから新しいファイルを作成し、そのファイルを開くのがベストでしょうか?それはユーザーのコンピュータに新しいファイルを作成しますか? – Trace
はい、まさにそのトレースです。 – jewelsea