ejemplo - java java io filenotfoundexception permission denied
El archivo nuevo de Java() dice FileNotFoundException pero el archivo existe (7)
Tengo una tarea para mi clase de CS donde dice leer un archivo con varios puntajes de prueba y me pide que los sume y los promedie. Mientras que sumar y promediar es fácil, tengo problemas con la lectura del archivo. El instructor dijo usar esta sintaxis.
Scanner scores=new Scanner(new File("scores.dat"));
Sin embargo, esto genera una excepción FileNotFoundException, pero he revisado una y otra vez para ver si el archivo existe en la carpeta actual, y luego de eso, pensé que tenía que hacer algo con los permisos. Cambié los permisos de lectura y escritura para todos, pero aún así no funcionó y sigue arrojando el error. ¿Alguien tiene alguna idea de por qué esto puede estar ocurriendo?
EDIT: En realidad estaba apuntando a un directorio hacia arriba, sin embargo, he solucionado ese problema. file.exists () devuelve true, sin embargo, cuando trato de ponerlo en el escáner, lanza el filenotfoundexception
Aquí está todo mi código
import java.util.Scanner;
import java.io.*;
public class readInt{
public static void main(String args[]){
File file=new File("lines.txt");
System.out.println(file.exists());
Scanner scan=new Scanner(file);
}
}
Aparte de todas las otras respuestas mencionadas aquí, puedes hacer una cosa que me funcionó.
Si está leyendo la ruta a través del Escáner o a través de argumentos de la línea de comandos, en lugar de copiar, pegue la ruta directamente desde el Explorador de Windows, simplemente ingrese la ruta manualmente.
Funcionó para mí, espero que ayude a alguien :)
El código en sí está funcionando correctamente. El problema es que la ruta de trabajo del programa está apuntando a otro lugar que usted cree.
Usa esta línea y ve dónde está el camino:
System.out.println(new File(".").getAbsoluteFile());
Hay tres casos en los que se puede FileNotFoundException
una FileNotFoundException
.
- El archivo nombrado no existe.
- El archivo nombrado es en realidad un directorio.
- El archivo nombrado no se puede abrir para leer por alguna razón.
Los dos primeros casos son poco probables según su descripción. Yo probaría contra el tercer caso usando file.canRead()
.
Si la prueba anterior devuelve verdadero, sospecharía lo siguiente:
Es posible que haya olvidado lanzar o capturar explícitamente la posible excepción (es decir, FileNotFoundExcetion
). Si trabaja en un IDE, debería haber recibido alguna queja del compilador. Pero sospecho que no ejecutó su código en un IDE de este tipo.
Acabo de ejecutar su código sin atender la queja de Netbeans, solo para recibir el siguiente mensaje de excepción:
Excepción en el hilo "main" java.lang.RuntimeException: Código fuente no compilable - excepción no reportada java.io.FileNotFoundException; debe ser atrapado o declarado para ser lanzado
Pruebe el siguiente código y vea si la excepción desaparece:
public static void main(String[] args) throws FileNotFoundException {
File file=new File("scores.dat");
System.out.println(file.exists());
Scanner scan=new Scanner(file);
}
Obviamente, hay varias causas posibles y las respuestas anteriores las documentan bien, pero así es como resolví esto en un caso particular:
Un estudiante mío tuvo este problema y casi me arranco el pelo tratando de resolverlo. Resultó que el archivo no existía, aunque parecía que sí existía. El problema fue que Windows 7 estaba configurado para "Ocultar extensiones de archivo para tipos de archivo conocidos". Esto significa que si el archivo parece tener el nombre "data.txt", su nombre de archivo real es "data.txt.txt".
Espero que esto ayude a otros a ahorrarse un poco de pelo.
Recientemente encontré un caso interesante que produce FileNotFoundExeption cuando el archivo obviamente existe en el disco. En mi programa leo la ruta del archivo de otro archivo de texto y creo el objeto Archivo:
//String path was read from file
System.out.println(path); //file with exactly same visible path exists on disk
File file = new File(path);
System.out.println(file.exists()); //false
System.out.println(file.canRead()); //false
FileInputStream fis = new FileInputStream(file); // FileNotFoundExeption
La causa de la historia es que la ruta contiene símbolos / r / n invisibles al final. Fijar:
File file = new File(path.trim());
Su sistema operativo puede bloquear la lectura y escritura desde y hacia un archivo dependiendo de los atributos de permiso del archivo.
Si está intentando leer el archivo, le recomiendo que utilice el método setReadable de File para configurarlo como verdadero, o este código, por ejemplo:
String arbitrary_path = "C:/Users/Username/Blah.txt";
byte[] data_of_file;
File f = new File(arbitrary_path);
f.setReadable(true);
data_of_file = Files.readAllBytes(f);
f.setReadable(false); // do this if you want to prevent un-knowledgeable
//programmers from accessing your file.
Si está intentando escribir en el archivo, le recomiendo usar el método setWritable de File para establecerlo en true, o, este código, por ejemplo:
String arbitrary_path = "C:/Users/Username/Blah.txt";
byte[] data_of_file = { (byte) 0x00, (byte) 0xFF, (byte) 0xEE };
File f = new File(arbitrary_path);
f.setWritable(true);
Files.write(f, byte_array);
f.setWritable(false); // do this if you want to prevent un-knowledgeable
//programmers from changing your file (for security.)
Una solución fácil, que funcionó para mí, es mover mis archivos de src a la carpeta principal del proyecto. No es la mejor solución, pero dependiendo de la magnitud del proyecto y su tiempo, podría ser simplemente perfecto.