2017-04-18 6 views
1

したがって、以前はすべてのためにjava.io.Fileを使用していました。 しかし、java.nio.Pathに切り替えると、いくつかの問題が発生しています...Javaパス例外

私が使っているのは、プログラムの起動とシャットダウン時に基本的にファイルのロード/保存です。

私は複数の場所でそれを使用するが、私は例を入力します:

Objects.requireNonNull(directory, "directory"); 

    if (this.myObjectMap.isEmpty()) { 
     return; 
    } 

    Files.list(directory).forEach(file -> { 
     try { 
      Files.deleteIfExists(file); 
     } catch (IOException exception) { 
      exception.printStackTrace(); 
     } 
    }); 

    Files.createDirectories(directory); 

    for (Object object : this.myObjectMap.values()) { 
     Path destination = directory.resolve(object.toString() + ".json"); 

     Files.deleteIfExists(destination); 
     Files.createFile(destination); 

     JsonObject properties = new JsonObject(); 

     JSONFileHandler.save(destination, properties); 
    } 

私の問題は、私はこれに似た何かをするたびに、それもパスを使用する前に、NoSuchFileException例外をスローしていることです...しかし、パスを作成した後に存在するかどうかをチェックするので、私が間違っていることは分かりません。

更新

例外スタックトレースは以下の通りです:

java.nio.file.NoSuchFileException: **the directory** 

at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79) 
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) 
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102) 
at sun.nio.fs.WindowsDirectoryStream.<init>(WindowsDirectoryStream.java:86) 
at sun.nio.fs.WindowsFileSystemProvider.newDirectoryStream(WindowsFileSystemProvider.java:518) 
at java.nio.file.Files.newDirectoryStream(Files.java:457) 
at java.nio.file.Files.list(Files.java:3451) 
+0

あなたが投げているスタックトレースラインを投稿できます例外? –

+0

投稿を更新しました。 –

答えて

2

Here'sPathのjavadoc、これはこう言われる、

に使用できるオブジェクトファイルシステム内のファイルを探します。 は通常、システムに依存するファイルパスを表します。

ので、パスはちょうどは、それが既存のファイルまたはディレクトリとなり、それが存在するかどうかわからないへのポインタではありません、Pathを表します。この例では

、我々は例えば、Files.listを呼び出す前に、Pathが存在するかどうかを確認するために、それは我々が有効なパスを反復処理されていることを確認します必要があります。

Path directory = Paths.get("some directory"); 
Objects.requireNonNull(directory, "directory"); 
if(Files.exists(directory)){ 
    Files.list(directory).forEach(file -> { 
     try { 
      System.out.println(file); 
     } catch (Exception exception) { 
      exception.printStackTrace(); 
     } 
    }); 
} 
+0

ああ、ありがとう!私がテストしているものから、それは動作しています。 –