**我正在尝试从文本文件中保存和获取Player对象,并且在使用我的IDE时可以使用,但是当我创建一个Jar时,找不到文本文件。我尝试过
this.getClas().getResources(path)
但是它仍然找不到我的文本文件的路径。有人可以帮忙吗?
public void setPlayer() throws FileNotFoundException {
ArrayList<Player> playerArrayList = new ArrayList<>();
playerArrayList = getPlayers();
Player player = new Player();
player.name = ViewManager.name;
player.score = Collision.points;
playerArrayList.add(player);
try{
FileOutputStream fileOut = new FileOutputStream("src/resources/highscore.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
for(Player player1 : playerArrayList){
out.writeObject(player1);
}
out.close();
fileOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
´´´´
答案 0 :(得分:3)
资源文件不是物理File
,因为它们可以在jar中。它们旨在为只读,并且类加载器可以将其缓存。它们区分大小写,以/
作为路径分隔符,并且路径从类路径的根(可能是src / resources)开始。
因此,如果某些物理文件不存在,请使用资源文件作为后备资源进行复制。
Path appDir = Paths.get(System.getProperty("user.home") + ".myapp");
Files.createDirectories(appDir);
Path file = appDir.resolve("highscore.txt");
if (!Files.exists(file)) {
// Copy resource to file, either:
URL url = getClass().getResource("/highscore.txt");
Path templatePath = Paths.get(url.toURI());
Files.copy(templatePath, file);
// Or
InputStream templateIn = getClass().getResourceAsStream("/highscore.txt");
Files.copy(templateIn, file);
}
try (FileOutputStream out = Files.newOutputStream(file)) {
...
}
路径是File的概括。
答案 1 :(得分:-1)
我不知道您使用的是什么IDE,但是您正在将文件写入源子目录。该目录可能不包含在jar中。