2016-04-20 13 views
0

フォルダが存在しないかどうかを確認するためにFiles.notExistsメソッドを使用しようとしています。私のコンピュータ(Windows)のローカルリソースで正常に動作しますが、共有リソースを指すときは常にfalseを返します。Files.notExistsはネットワークディレクトリで常にfalseです

String stringPath = "\\sharedResourceName\existentFolder"; 
Path path = Paths.get(stringPath); 
Files.notExists(path) // false 
//OK, because the folder exists 

String stringPath = "\\sharedResourceName\nonExistentFolder"; 
Path path = Paths.get(stringPath);  
Files.notExists(path) // false 
//Why here it evaluates to false if it is indeed a non existent folder?? 
+0

あなたの質問のコードは有効なJavaコードではありません。 'Files.notExists(String)'というシグニチャを持つメソッドはなく、 'Files.notExists(パスパス、LinkOption ...オプション)'のみです。 – Robert

+0

@Robertはい、申し訳ありませんが、私はいくつかの行を見逃しています。編集済み – Arcones

答えて

2

documentation of Files.notExists()状態:

共有リソースの非存在を確認する

String stringPath = "C:/existentFolder"; 
Path path = Paths.get(stringPath); 
Files.notExists(path) // false 
//OK, because the folder exists 

String stringPath = "C:/nonExistentFolder"; 
Path path = Paths.get(stringPath); 
Files.notExists(path) // true 
//OK, because the folder doesn't exists 

:非ローカルリソースの存在を確認する

:状況は以下の通りであります戻り値: ファイルが存在しない場合はtrue。ファイルが存在するか、またはその存在が

を決定できない場合はfalse Iは、未割り当てられたネットワーク共有したがって結果(したがってfalse)を決定することができない、ファイル/ファイルクラスを使用してアクセスすることができないと仮定する。

予想されるように、次のコードは、OracleのJava 8を使用して動作します。

String s = "\\\\myserver\\sharename\\directory"; 
    Path p = FileSystems.getDefault().getPath(s); 
    System.out.println(Files.notExists(p, LinkOption.NOFOLLOW_LINKS)); 
    System.out.println(!new File(s).exists()); 

パスが正しい場合、それは二度falseを出力し、それがtrueが存在する場合。 Windowsエクスプローラでネットワーク共有にアクセスできることを確認しましたか?

BTW:使用されているネットワークリソース名が間違っています。 Javaでは、バックスラッシュからエスケープする必要があります。したがって、ネットワーク共有にアクセスするためのコードの正しい文字列は、\\\\sharedResourceName\\existentFolderになります。

+1

マッピングはドライブレターにのみ適用されます。 UNCパスは常に使用可能です。 –

+0

これは期待どおりに動作し、私の問題を解決します!コードと説明をありがとう – Arcones

関連する問題