2016-11-01 10 views
2

誰でも私に言うことができますPaths.get("")Java nio。空のパス

ここにコードと出力があります。

public static void main(String[] args) { 
    Path path = Paths.get(""); 
    System.out.printf("`%s`%n", path); 
    System.out.printf("`%s`%n", path.normalize()); 
    System.out.println(Files.exists(path)); 
    System.out.println(Files.isExecutable(path)); 
} 

`` 
`` 
true 
true 

答えて

2
System.out.println(Paths.get("").toAbsolutePath()); 

/ユーザ/アンドリュー/ワークスペース/は

に傷を付け、それが現在の作業ディレクトリだように見えます。私のマシンでは、現在のユーザにとって、ディレクトリの 'x'フラグが真であるため、Javaは実行可能であると報告しています。 javadocsから

このメソッドは、ファイルが存在し、このJava仮想マシンがファイルを実行するための適切な権限を持っていることを確認します。ディレクトリへのアクセスをチェックする際に、セマンティクスが異なる場合があります。たとえば、UNIXシステムでは、実行アクセスをチェックすると、Java仮想マシンがファイルまたはサブディレクトリにアクセスするためにディレクトリを検索する権限を持っているかどうかがチェックされます。

3

これは、プログラムを実行するディレクトリにマップされます。 絶対パスに変換して自分自身をテストします。 System.out.println(Paths.get("").toAbsolutePath());

+0

しかし、なぜ、それが実行可能ですか? – antonpp

+3

"これはプログラムのルートディレクトリにマップされます" - いいえ、それを実行する現在のデフォルトディレクトリです。プログラムがディレクトリBにある間にディレクトリAに移動し、java -cp B MyClassと入力してください。それはB.ではなくAを印刷します。 –

+0

はい、あなたは正しいです。 – benehsv

0

ドキュメントは、それが既存のファイルシステムへのリンクを持って言うように:それは、デフォルトのファイルシステムに想定さの参照を意味し、呼び出し元のコードの有用性を制限する使用

することができます小さなアップデートで確認してください:

public static void main(String[] args) { 
     Path path = Paths.get(""); 

     System.out.printf("`%s`%n", path); 
     System.out.printf("`%s`%n", path.normalize()); 
     System.out.println(Files.exists(path)); 
     System.out.println(Files.isExecutable(path)); 

     System.out.println(path.toFile().getAbsolutePath()); 
    } 

最終出力は次のようなものです:

C:\ユーザー\ナザール\プロジェクト\ IdeaProjects \テスト・プロジェクト

関連する問題