0

サーバー: 192.168.0.18/share は samba サーバーであり、すべてがパスに書き込むことができます

Files.write(Paths.get(URI.create("file://192.168.0.18/share/aa/aaaa")), "asd34234asdasd".getBytes(), StandardOpenOption.CREATE,StandardOpenOption.APPEND);


System.out.println(Files.isWritable(Paths.get(URI.create("file://192.168.0.18/share/aa/aaaa"))));

最初の行が実際にファイルを作成し、その中にテキストを追加することがわかりました。

しかし、2 行目は false を返します。

なぜかわかりませんでした。

そして、 JDK7_u5 & u13 を試します。

ありがとう 。

4

2 に答える 2

0

共有に書き込む場合、ファイル属性が常に使用できるとは限らないため、コードが示しているのは、ファイルが読み取り可能かどうかを判断できないということです。

これは、実際には別のオペレーティングシステムによってホストされているファイルシステムでファイル操作を行う場合によく当てはまります。低レベルのファイル属性が常にクライアントに公開されるとは限りません。

実行した場合、new File(<your file>).exists()ほぼ確実に戻りtrueます。したがって、表示されている原因が実際に属性に関連しているかどうかを判断するには、次のいずれかを試すことができます。

DosFileAttributes attr =Files.readAttributes(<your file>, DosFileAttributes.class);

また

PosixFileAttributes attr = Files.readAttributes(<your file>, PosixFileAttributes.class);

そして、結果を調べて、意味のある/期待される属性が戻ってくるかどうかを確認します

于 2013-02-27T17:43:18.470 に答える
0

"file://192.168.0.18/share/aa/aaaa"チェックしたときに が存在しない場合は、次のように (既存の) ディレクトリで書き込み可能フラグをテストする必要があります"file://192.168.0.18/share/aa/"

Path target=Paths.get(URI.create("file://192.168.0.18/share/aa/aaaa");
if (Files.exists(target)){  // check existing file
    System.out.println(Files.isWritable(target));
}else{ // check directory
    System.out.println(Files.isWritable(target.getParent()));
}
于 2013-02-27T15:48:12.740 に答える