Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JAR读取、写入外部xml文件_Java_Xml_File Io_Jar - Fatal编程技术网

Java 从JAR读取、写入外部xml文件

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(

我一直在堆栈溢出中搜索,并尝试了多个答案, 我的问题是,如果我从IDE(eclipse)中尝试该程序,那么它就可以正常工作。 但是当我创建JAR文件并尝试从那里运行它时,它根本不起作用

到目前为止,我认为这是关于我如何定义我的文件,我觉得很奇怪,因为我把它作为一个类似问题的解决方案

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下创建目录的信息,请参阅