为什么在java中使用java.security.SecurityManager可以读取任何文件?

isl*_*nds 3 java securitymanager java-io

我只想在我的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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

/opt/java.policy下面的文件

grant {
    permission java.io.FilePermission "./out.txt", "write";
};
Run Code Online (Sandbox Code Playgroud)

然后我跑了

java -Xss64m -Xms16m -Xmx512m -Djava.security.manager -Djava.security.policy=/opt/java.policy Main
Run Code Online (Sandbox Code Playgroud)

但是没有错误,输出就是这样in.txt.我尝试了其他文件并获得了相同的结果.为什么会这样?

use*_*421 6

来自Javadoc:

请注意:代码始终可以从它所在的同一目录(或该目录的子目录)中读取文件; 它不需要明确的许可.

并不是说这是明确的.代码不在"目录"中:它是当前工作目录执行的,这似乎是意思.