如何在运行jar文件时创建文本文件

时间:2016-10-12 17:51:45

标签: java eclipse jar

我在下面有这个代码,当我在eclipse中使用它时,它的工作完全正常。 但是,如果我构建一个可执行jar文件,则此代码无法完成。问题是永远不会创建文本文件。

这是类文件夹的绝对方式" game / src / res"地图"世界"是我尝试创建文本文件的地方。

所以我的问题:

运行可执行jar文件时是否有一种简单的方法来创建文本文件?

public GenerateWorld(int m, int n,int y, int x){//m is rows n is columns

    Random random = new Random();


    try{
        out = new PrintStream(new FileOutputStream("src/res/worlds/temple.txt")); 
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    out.println(n+" "+m);
    out.println(x+" "+y);
    numbers = new String[m][n]; 
    String row = "";
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            if(i+1==x&&j+1==y){
                numbers[i][j] = 29+" ";
            } else {

                if(i==0){//TOP WALL
                    if(j==0){
                        numbers[i][j] = 25+" ";
                    } else if(j+1==n) {
                        numbers[i][j] = 26+" ";
                    } else {
                        numbers[i][j] = 21+" ";
                    }
                } else if(j==0){//LEFT WALL
                    if(i==0 || i+1 == m){
                        numbers[i][j] = 25+" ";
                    } else {
                        numbers[i][j] = 23+" ";
                    }
                } else if(i+1 == m){//BOTTOM;
                    if(j == 0 || j+1 == n){
                        numbers[i][j] = 25+" ";
                    } else {
                        numbers[i][j] = 22+" ";
                    }
                } else if(j+1 == n){//RIGTH WALL
                    if(i==0){
                        numbers[i][j] = 26+" ";
                    } else if( i+1==m){
                        numbers[i][j] = 25+" ";
                    } else {
                        numbers[i][j] = 24+" ";
                    }
                } else {

                    if(random.nextInt(20)==5){
                        numbers[i][j] = 28+" ";
                    } else {
                        numbers[i][j] = 20+" ";
                    }
                }
            }
            row += numbers[i][j];

        }
        out.println(row);
        row = "";
    }
    out.close();
}

2 个答案:

答案 0 :(得分:2)

由于您使用new FileOutputStream("src/res/worlds/temple.txt"),请确保此路径相对于当前工作目录确实存在。如果没有(即“src / res / worlds /”),则Java无法创建“temple.txt”文件。当您从Eclipse运行它时,您的CWD被设置为项目目录,其中可能存在“src / res / worlds”目录。但是如果你从JAR运行它,而CWD不是你项目的主目录,那么这条路径就不可用了。

因此,请使用File的类isDirectory方法来测试您的路径是否存在,如果不存在,请使用mkdirs方法立即创建整个路径。

但最好考虑将生成的文件放在一些可配置的目录中(不是在源文件中硬编码)。

答案 1 :(得分:1)

你可以做的是你可以在代码中获取jar的绝对路径,然后使用属性文件,你可以使用MKDIRS获取你想要创建目录的路径,或者只是检查文件是否是创建与否,然后创建文件。

获得绝对路径  String absolutePath = getClass()。getProtectionDomain()。getCodeSource()

之后只需在内部或外部加载属性文件,然后使用路径。

Reading Properties file in Java