まず第一に、Java はデフォルトおよび設計上、ローカル ファイルを信頼し、リモート ファイルを信頼しません。したがって、テストするときは、自宅のコンピューターで実行できることが、会社のサーバーのリモート ドライブでは実行できない可能性があることに注意してください。
次に、リモート ドライブのファイル アクセス許可を確認する場合、通常、Windows エクスプローラーで設定するだけでは十分ではありません ( Property...- Read only/ Hide/Archiveなど)。たとえば、私の組織には、ローカルとリモートの両方のファイル許可を制御するための他のメカニズムがあり、PC の管理者であってもすべてを保証することはできません。手動/プログラムでファイルのアクセス許可を変更できる場合でも、他のアプリケーション/グループ ポリシーなどで禁止されている場合は、変更に失敗する可能性があります。(たとえば、それが不可能であることを示唆する をsetReadable()返しますfalse)たとえば、リモート ディレクトリにexecuteあるファイルを開くことはできますが、txtbat同じディレクトリにあるファイルは実行可能ではありません。実際、私の場合、batファイルを作成したいときは、管理者に権限を増やすよう依頼する必要があります。bat多分延長禁止だと思います。Windowsのユーザーグループのユーザーとして、あなたのアクションとあなたが実行するJVMは、JVM自体よりも高いルールによって制限されているためです。私が間違っている場合は修正してください。
ただし、ファイルの許可を設定できない場合でも、Java 7 でそれらを正しく読み取ることができるようになりました。明らかに、バグ レポートの後、Java 関係者はそのほとんどを修正するために何かを行いました。を使用してjdk 1.7.0_19おり、テストするために次のことを行いました。
Windows エクスプローラーで、リモート ファイルのプロパティを および に設定しRead OnlyますHidden。
 
以下のコードを使用してJavaから読んでください(Stephen Cのリンクから、setXxxxx()メソッドが機能することを確認するために変更されています)。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FilePermissionTester {
    public static void main( String[] args ) throws IOException {
        File file = new File("Y:\\some\\remote\\drive\\directoy\\xxxxx.txt");
        System.out.println( "exists:"  + file.exists() );
        System.out.println( "is file:"  + file.isFile() );
        System.out.println( "can read:" + file.canRead() );
        System.out.println( "can execute:" + file.canExecute() );
        System.out.println( "can write:" + file.canWrite() );
        System.out.println( "is hidden:" + file.isHidden() );
        System.out.println("change it to be unreadable, and it works? " + file.setReadable(false));
        System.out.println( "can read:" + file.canRead() );
        System.out.println("change it to be writable, and it works? " + file.setWritable(true));
        System.out.println( "can write:" + file.canWrite() );
        FileInputStream fileInputStream = new FileInputStream(file);
        fileInputStream.read();
        fileInputStream.close();
    }
}
 
私が得た:
exists:true
is file:true
can read:true
can execute:true
can write:false
is hidden:true
change it to be unreadable, and it works? false
can read:true
change it to be writable, and it works? true
can write:true
これで、このファイルを読み取り、編集して保存できるようになりました。Save As..保存時に求められた許可を変更する前。
setReadable(false)ファイルは読み取り可能であり、 を返しますfalseが、ファイルはまだ読み取り可能であることに注意してください。JavaDoc はここで、ユーザーがアクセス権を変更する権限を持っていない場合、またはが既にであり、基盤となるシステムにこれに対する実装がない場合にsetReadable()返されると述べています。Java API へのデバッグは、実装がマークされており、それ以上の情報を表示できないため、多くの情報を提供しません。しかし、私は書き込み可能性を変更する許可を持っているので、それは私には理解できないものです.falsereadablefalsenative
java.util.Fileただし、 など、 でサポートされていない属性が他にもあることに注意してくださいsetHidden()。たぶん、 AccessControllerjava.securityのような他のパッケージをチェックできますか?