2016-10-12 14 views
0

私はこのコードを以下に示します。Eclipseで使用すると完全に正常に動作しています。 しかし、実行可能なjarファイルをビルドすると、このコードは完了できません。問題は、テキストファイルが決して作成されないということです。jarファイルを実行しているときにテキストファイルを作成する方法

これは、マップフォルダ "worlds"がテキストファイルを作成しようとしているクラスフォルダ "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

あなたがnew FileOutputStream("src/res/worlds/temple.txt")を使用しているので、確認して、現在の作業ディレクトリにこのパス相対は実際には存在しません。それがなければ(すなわち "src/res/worlds /")、Javaは "temple.txt"ファイルを作成できません。 Eclipseから実行しているときには、CWDはprojectディレクトリに設定されています。おそらく "src/res/worlds"ディレクトリが存在すると思われます。しかし、JARから実行し、CWDがプロジェクトのホームディレクトリでない場合、このパスは使用できません。

FileのクラスisDirectoryメソッドを使用して、パスが存在するかどうかをテストし、そうでない場合は、mkdirsメソッドを使用して一度にパス全体を作成します。

しかし、生成されたファイルを構成可能なディレクトリ(ソースファイルにハードコードされていない)に配置することを検討する方がよいでしょう。

1

あなたができることは、コード内のjarファイルの絶対パスを取得することができます。その後、プロパティファイルを使用して、MKDIRSを使用してディレクトリを作成する場所のパスを取得するか、 FILEを作成するかどうかを指定します。

絶対パスを取得 ストリングabsolutePath =はgetClass()。getProtectionDomain()。getCodeSource()

すなわち特性が内部または外部ファイルと、パスを使用justload後。

Reading Properties file in Java

関連する問題