检测运行jar文件的路径是可行的 - 但BufferedWriter写入jarfilename.jarmyfile.txt

时间:2014-07-26 15:00:00

标签: java bufferedwriter

我真的很困惑。

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();
    }
}

1 个答案:

答案 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;来自被替换的字符串。这会产生一个相对路径名,并且不知道那时会发生什么。