Java 从JAR读取、写入外部xml文件
我一直在堆栈溢出中搜索,并尝试了多个答案, 我的问题是,如果我从IDE(eclipse)中尝试该程序,那么它就可以正常工作。 但是当我创建JAR文件并尝试从那里运行它时,它根本不起作用 到目前为止,我认为这是关于我如何定义我的文件,我觉得很奇怪,因为我把它作为一个类似问题的解决方案Java 从JAR读取、写入外部xml文件,java,xml,file-io,jar,Java,Xml,File Io,Jar,我一直在堆栈溢出中搜索,并尝试了多个答案, 我的问题是,如果我从IDE(eclipse)中尝试该程序,那么它就可以正常工作。 但是当我创建JAR文件并尝试从那里运行它时,它根本不起作用 到目前为止,我认为这是关于我如何定义我的文件,我觉得很奇怪,因为我把它作为一个类似问题的解决方案 public class HighscoreXML { private String path = new File(Menu.class.getProtectionDomain().getCodeSource(
public class HighscoreXML {
private String path = new File(Menu.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParentFile()+"/Highscore.xml";
private File file = new File(path);
public ArrayList<Player> readXML(){
ArrayList<Player> players = new ArrayList<>();
if (!file.exists()){
try {
createFile();
}catch (Exception ex) {
ex.printStackTrace();
}
}
else{
SAXBuilder builder = new SAXBuilder();
try{
Document readDoc = builder.build(file);
Element root = readDoc.getRootElement();
for(Element element : root.getChildren("Player")){
Player player = new Player("name", "0", "0");
player.setName(element.getChildText("Name"));
player.setScore(element.getChildText("Score"));
player.setTime(element.getChildText("Time"));
players.add(player);
}
}catch(Exception e){
e.printStackTrace();
}
}
return players;
}
}
公共类HighscoreXML{
私有字符串路径=新文件(Menu.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParentFile()+“/Highscore.xml”;
私有文件=新文件(路径);
公共ArrayList readXML(){
ArrayList players=新的ArrayList();
如果(!file.exists()){
试一试{
createFile();
}捕获(例外情况除外){
例如printStackTrace();
}
}
否则{
SAXBuilder=新SAXBuilder();
试一试{
文档readDoc=builder.build(文件);
Element root=readDoc.getRootElement();
for(元素:root.getChildren(“Player”)){
玩家=新玩家(“名称”、“0”、“0”);
player.setName(element.getChildText(“Name”);
player.setScore(element.getChildText(“Score”);
player.setTime(element.getChildText(“Time”);
players.add(player);
}
}捕获(例外e){
e、 printStackTrace();
}
}
返回球员;
}
}
ClassLoader.getResourceAsStream()有什么问题?你不能写入你的jar文件-它不是那样工作的。你想把文件放在哪里??,例如System.getProperty(“user.home”)获取用户主目录,你还可以计算出jar的位置。我不想在我的jar中写入,这就是外部的意思。我从堆栈溢出中得到了代码,并对其进行了测试,它向我传递了jar所在的路径,而不是jar所在的路径。因此,原始路径是正确的…@BruceMartin,我希望它能在mac和WinC上工作,在System.getProperty(“user.home”)下创建一个目录可能是最简单的,但在Windows上可能会有问题,请参阅。另一种方法是在windows上使用APPDATA,有关在APPDATA下创建目录的信息,请参阅