Sólo quiero algunos archivos para ser leídos y escritos en mi programa Java. Así que uso java.security.SecurityManager
para manejar esto, pero parece poco satisfactoria.
El Main.java
archivo se encuentra por debajo
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);
}
}
}
y el archivo /opt/java.policy
, como a continuación
grant {
permission java.io.FilePermission "./out.txt", "write";
};
Luego ejecutar
java -Xss64m -Xms16m -Xmx512m -Djava.security.manager -Djava.security.policy=/opt/java.policy Main
Pero no hay errores, la salida es lo que el in.txt
es. Probé otro archivo y obtuve el mismo resultado. ¿Por qué pasó esto?
Desde el Javadoc :
Por favor nota: El código siempre se puede leer un archivo desde el mismo directorio que está en (o un subdirectorio de ese directorio); que no necesita ningún permiso explícito para hacerlo.
No es que esto está bien especificado. El código no es 'en' un directorio: se ejecuta desde un directorio de trabajo actual, y esto parece ser lo que se quiere decir.