2017-02-24 9 views
1

jarファイルの起動時にファイルを作成するにはどうすればいいですか? 実際にjarファイルの正確なパスを知り、それがまだ存在しない場合はファイルを作成する必要があります 私はこれを使用しようとしましたが、私のコンピュータと私のWindowsサーバー上で異なる結果があります!Javaで起動時にファイルを作成する

String path = MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
    String decodedPath = URLDecoder.decode(path, "UTF-8").substring(1); 

それは私のコンピュータ上で現在のパスを、私を折り返して、それは変わる「C:を\」私の専用のWindowsサーバ上の

+2

通常、Windowsではアプリケーションのディレクトリに書き込むことはできません( 'Users'のような書き込み可能なディレクトリにないと仮定します)。 jarファイルをProgram Filesに入れると、そこに書き込むには管理者権限が必要です。現在のユーザーのディレクトリにファイルを書き込むことをお勧めします。すべては言った、何が間違っている[この答えですか?](http://stackoverflow.com/questions/4032957/how-to-get-the-real-path-of-java-application-at-runtime) –

+0

もしそうなら私はすべてのものが正しく動作するはずですユーザーフォルダから私のjarファイルを置く?また、stackoverflowの私の最初の質問に答えてくれてありがとう:P – Peyman

+0

いいえ、あなたの瓶の場所は問題ではありません。それは移植可能でなければなりません。 Windowsのユーザディレクトリ( 'C:\ users \ someAccount'のような)は、常に書き込み可能でなければなりません。答えはそれを言いますが、それは 'System.getProperty(" user.home ");'です。 Windows 10とJava 8では、これは私に 'C:\ Users \ Chris'を与えます –

答えて

0

ここでは、起動時にファイルを作成し、同じディレクトリに置くことができる方法です.jar:

private void createFile() throws Exception { 
    File currentDir = new File(Preferences.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); 
    prefs = new File(currentDir.getParentFile().getAbsoluteFile() + "/hackemos-prefs.txt"); 
    if(!prefs.exists()) { 
     prefs.createNewFile(); 

     String[] defaults = { 
       "9", // number of items 
       "100", // correct limit 
       "0", // amount to get wrong 
       "75", // delay, in ms 
       "456,278", // default mouse position for start button 
       "653,476", // default mouse position for copying text 
       "686,615", // default mouse position for the text box 
       "150,100", // Copy drag range 
       "0" // mac mode, 1 = enabled 
     }; 

     write(defaults); 
    } 
} 

は、ここでは、起動時にファイルを作成し、Windows APPDATAフォルダ(物事を維持するための良い場所)、またはLinux/Macのと同等に置くことができる方法です。

public static void initDirs() { 
    String osName = Hardware.osName.toLowerCase(); 

    if(osName.contains("win")) { 
     gameDir = new File((System.getenv("APPDATA") + File.separator + "Hidden" + File.separator)); 
    } else if(osName.contains("mac")) { 
     gameDir = new File(System.getProperty("user.home") + "/Library/Application Support/Hidden"+File.separator); 
    } else if(osName.contains("nux")) { 
     gameDir = new File(System.getProperty("user.home")); 
    } 

    if(!gameDir.exists()) gameDir.mkdir(); 

    try { 
     FileOutputStream fos = new FileOutputStream(gameDir + File.separator + fileName); 
     ObjectOutputStream out = new ObjectOutputStream(fos); 
     out.writeObject(object); 
     out.close(); 
     fos.close(); 
     return true; 
    } catch(Exception e) { 
     e.printStackTrace(); 
     System.err.println("Couldn't save game."); 
     return false; 
    } 
} 

これは私の古いプログラムの一部のコードです。

+0

まあ、私は必要以上のものを持っています。ありがとうございました!それはゲームコードのようです:私はどのゲームを知ることができますか? – Peyman

+0

問題ありません!ゲームは次のとおりです:https://www.youtube.com/watch?v=PkYXPXxMd7E&t=280s私は長いことそれに取り組んでいないが、それはいつか終わることを望むものだ。 – wdavies973

関連する問題