2013-08-08 24 views
6

Java関数createTempFile("test", "test")を呼び出す際に「システムが指定されたパスを見つけることができません」という例外が発生しました。 グーグルで試してみましたが運がありません。 Javaがデフォルトの一時パスを取得する場所を知っている人はいますか? Windows変数が正しいと思われ、それらを変更してもjavaには影響しません。createTempFile中にシステムがパスを見つけることができません

+3

コードください... –

+2

チェックいただきました!文字列のdirName = System.getProperty( "java.io.tmpdir"); File.createTempFile(文字列接頭辞、文字列接尾辞、ファイルディレクトリ) – Horuss

+0

File.CreateTempFile( "test"、 "test")はwhileコードの前にあります:) – user1985273

答えて

13

誰でもJavaはそれがjava.io.tmpdirプロパティから読み込まれ、デフォルトの一時パス

を取得する場所から知っています。

Files.createTempFile("test", "test"); 

は、本質的に再びjava.nio.file.TempFileHelper.create(dir, prefix, suffix, false, attrs);を呼び出しjava.nio.file.TempFileHelper.createTempFile(null, prefix, suffix, attrs);呼び出します。 dirがnullの場合があり、次のように宣言されているtmpdirに設定されています:

private static final Path tmpdir = 
    Paths.get(doPrivileged(new GetPropertyAction("java.io.tmpdir"))); 

@Joniからの回答のように明示的にプロパティを設定することができます。あなたが明示的に設定しない場合、JVMは、起動時にプラットフォーム固有のデフォルト値に初期化 - もEnvironment variable to control java.io.tmpdir?

を見ると、それがどのように見られないことができますか?

プロパティjava.io.tmpdirが無効なディレクトリを指している場合、一時ファイルを作成できません。

7

は独立デフォルト値が得られるかの、あなたはJVMの起動時にシステムプロパティjava.io.tmpdirを設定することで、一時ファイルのディレクトリを設定することができます。

java -Djava.io.tmpdir=/path/to/where/ever/you/like YourClass 

デフォルト値はどこから来るのかを知りたい場合は、あなたのJVMのソースコードを読む必要があります。

GetTempPath機能チェックのため:たとえば、Windows上でのOpenJDKは、次のように環境変数にパスとレジストリがルックアップするAPI関数GetTempPathW(JDKのソースコード内のファイルjava_props_md.cを検索)を呼び出し、次の順序で環境変数が存在し、最初に見つかったパスを使用します。

  1. TMP環境変数で指定されたパス。
  2. TEMP環境変数で指定されたパス。
  3. 環境変数USERPROFILEで指定されたパス。
  4. Windowsディレクトリ。

この関数は、パスが存在することを確認したり、現在のプロセスにパスに対するアクセス権があるかどうかを調べたりしません。

+0

TMPのenv変数を変更すると、java.io.tmpdirは依然として透過的なoodatuimに出力されますか? – user1985273

+0

"oodatuim"とはディレクトリを意味すると思います。プログラムがTMPをリセットするスクリプトで起動されているかもしれません。おそらく変更を有効にするためにシステムを再起動する必要があります。おそらくJVMはGetTempPath関数を使用しません。データが提供されます。 – Joni

3

試してみてください。

String path = System.getProperty("java.io.tmpdir"); 

参照:get property method

と完全性を期すためにここでそれを追加するには、方法createTempFile(String prefix,String suffix)JavaのfileからcreateTempFile(String prefix, String suffix, File directory)方法もありますクラス。ここで

は、一時ファイルのフィンパスに私のコードで、一時パスを見つける:このコードの

public class GetTempFilePathExample 
{ 
    public static void main(String[] args) 
    { 

     try{ 

      //create a temp file 
      File temp = File.createTempFile("temp-file-name", ".tmp"); 

      System.out.println("Temp file : " + temp.getAbsolutePath()); 

     //Get tempropary file path 
      String absolutePath = temp.getAbsolutePath(); 
      String tempFilePath = absolutePath. 
       substring(0,absolutePath.lastIndexOf(File.separator)); 

      System.out.println("Temp file path : " + tempFilePath); 

     }catch(IOException e){ 

      e.printStackTrace(); 

     } 

    } 
} 

出力は次のとおりです。

Temp file : /tmp/temp-file-name3697762749201044262.tmp 
Temp file path : /tmp 
関連する問題