我真的很困惑。
String path = myclass.class.getProtectionDomain().getCodeSource().getLocation()
.toString().replace("file:/", "") + "Myfile.txt"
(.replace("file:/", "")
在那里,否则输出文件:/ C:Insertpathhere)
获取正在运行的jar的包含目录。当我在控制台中打印它时,它会打印C:/users/username/desktop/Myfile.txt。但是,当我使用具有相同变量路径的BufferedWriter时,它将文件输出到C:/users/username/destop/Maze.jarMyfile.txt(其中maze.jar是jar文件的名称)。
我真的很难过,有人可以帮忙吗?
完整代码: (其中maz是生成的地图的2D字符数组,genmaze是2D字符串数组。)
String path = myclass.class.getProtectionDomain().getCodeSource().getLocation().toString().replace("file:/", "") + "Myfile.txt"
System.out.println(Values.mazegen);
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(path));
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
genmaze[i][j] = Character.toString(maz[i][j]);
writer.write(maz[i][j]);
System.out.print(maz[i][j]);
}
writer.newLine();
System.out.println();
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 0 :(得分:1)
这样可以:
ProtectionDomain pd = Y.class.getProtectionDomain();
CodeSource cs = pd.getCodeSource();
URL url = cs.getLocation();
System.out.println( "URL=" + url );
String path = url.toString().replace("file:", "") + "Myfile.txt";
并且文件名称正确。
显示正确的URL,无论是目录(如果我执行.class),还是jar,如果我将其打包到jar中。
请注意但是,我省略了&#39; /&#39;来自被替换的字符串。这会产生一个相对路径名,并且不知道那时会发生什么。