で
おかげでこの答えは、のAppDataを行うことはありませんが、そう、これはPreferences APIに基づいて1つである、他のソリューションについて尋ねました。このサンプルは、ハイスコアシステム用のプリファレンスベースのAPIストレージ向けです。サンプルはデータを暗号化しません。
あなたはあなたがハイスコアをすくい上げるように設定を変更することについてユーザーが心配していると言います。ユーザーがデータを変更できないようなクライアントアプリケーションのデータを暗号化または隠すことは難しい命題です。ここではその方法を説明しません。それがあなたにとって必要条件であれば、それを達成するための方法についてインターネット上の他の情報を調べることができます。
ScoreStorage.java
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
public class ScoreStorage {
private static final int MAX_NUM_SCORES = 3;
private static final String SCORE_PREFERENCE_KEY_PREFIX = "score-";
private ObservableList<Integer> scores = FXCollections.observableArrayList();
private Preferences scorePreferences = Preferences.userNodeForPackage(
ScoreStorage.class
);
public ScoreStorage() throws BackingStoreException {
for (String key: scorePreferences.keys()) {
scores.add(scorePreferences.getInt(key, 0));
}
}
public ObservableList<Integer> getUnmodifiableScores() {
return FXCollections.unmodifiableObservableList(scores);
}
public void clearScores() {
scores.clear();
storeScores();
}
public void recordScore(int score) {
int i = 0;
while (i < MAX_NUM_SCORES && i < scores.size() && scores.get(i) >= score) {
i++;
}
if (i < MAX_NUM_SCORES) {
if (scores.size() == MAX_NUM_SCORES) {
scores.remove(scores.size() - 1);
}
scores.add(i, score);
storeScores();
}
}
private void storeScores() {
int i = 0;
for (int score: scores) {
scorePreferences.putInt(SCORE_PREFERENCE_KEY_PREFIX + i, score);
i++;
}
while (i < MAX_NUM_SCORES) {
scorePreferences.remove(SCORE_PREFERENCE_KEY_PREFIX + i);
i++;
}
}
}
HighScoreApp.java
テストハーネス:
import javafx.application.Application;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import java.util.Random;
import java.util.prefs.BackingStoreException;
public class HighScoreApp extends Application {
private static ScoreStorage scoreStorage;
private Random random = new Random(42);
@Override
public void start(Stage stage) throws Exception {
ListView<Integer> scoreList = new ListView<>(scoreStorage.getUnmodifiableScores());
scoreList.setPrefHeight(150);
Label lastScoreLabel = new Label();
Button generateScore = new Button("Generate new score");
generateScore.setOnAction(event -> {
int lastScore = random.nextInt(11_000);
lastScoreLabel.setText("" + lastScore);
scoreStorage.recordScore(lastScore);
});
Button clearScores = new Button("Clear scores");
clearScores.setOnAction(event -> scoreStorage.clearScores());
HBox scoreGenerator = new HBox(10, generateScore, lastScoreLabel);
scoreGenerator.setAlignment(Pos.BASELINE_LEFT);
VBox layout = new VBox(10, scoreGenerator, scoreList, clearScores);
layout.setPadding(new Insets(10));
stage.setScene(new Scene(layout));
stage.show();
}
public static void main(String[] args) throws BackingStoreException {
scoreStorage = new ScoreStorage();
launch(args);
}
}
http://stackoverflow.com/questions/18 906163/how-do-i-create-directories-and-files-users-appdata-directory – noobcoder
両方を試してみましたが、うまくいきません! – Aleandro
[preferences API](https://docs.oracle.com/javase/8/docs/technotes/guides/preferences/)は、おそらくあなたにとってより良い解決策です。 – jewelsea