なぜ、任意のファイルは、Javaでjava.security.SecurityManagerを使用して読み取ることができますか?

島:

私はいくつかのファイルが私のJavaプログラムで読み書きすることにしたいです。だから私は使用してjava.security.SecurityManagerこれを管理するために、それは不十分なようです。

Main.javaファイルは以下の通りです

import java.io.*;
import java.util.*;
public class Main {
    static private final String INPUT = "in.txt";
    public static void main(String args[]) throws Exception {
        FileInputStream instream = null;
        BufferedReader reader = new BufferedReader(new FileReader(INPUT));
        String tempString = null;
        while ((tempString = reader.readLine()) != null) {
            System.out.println(tempString);
        }
    }
}

そして、ファイル/opt/java.policy以下のような

grant {
    permission java.io.FilePermission "./out.txt", "write";
};

それから私は実行します

java -Xss64m -Xms16m -Xmx512m -Djava.security.manager -Djava.security.policy=/opt/java.policy Main

しかし、エラーが出力が何であるか、存在しないin.txtです。私は他のファイルを試してみましたが、同じ結果を得ました。これはなぜ起こるのでしょうか?

user207421:

以下からのJavadoc

ノートはしてください:コードは、常にそれが中だ同じディレクトリ(またはそのディレクトリのサブディレクトリ)からファイルを読み込むことができます。それはそうする明示的な許可を必要としません。

これは、十分に指定されていないこと。コードは、ディレクトリ「に」ではありません:それはされてから実行され、現在の作業ディレクトリ、これが何を意味するかのように見えます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=201521&siteId=1