2010-10-02 26 views
83

Tengo un proyecto con 2 paquetes:¿Cómo leer el archivo de la ruta relativa en el proyecto de Java? java.io.File no puede encontrar la ruta especificada

  1. tkorg.idrs.core.searchengines
  2. tkorg.idrs.core.searchengines

En el paquete (2) Tengo un archivo de texto ListStopWords.txt, en paquete (1) Tengo una clase FileLoadder. Aquí está el código en FileLoader:

File file = new File("properties\\files\\ListStopWords.txt"); 

Pero tienen este error:

The system cannot find the path specified 

¿Puede dar una solución para solucionarlo? Gracias.

+5

Sus dos ejemplos de paquete son los mismos. ¿No quieres decir 'properties.files' para' 2'? – BalusC

Respuesta

119

Si ya está en la ruta de clase, a continuación, sólo lo consigue de la ruta de clases. No juegue con rutas relativas en java.io.File. Dependen del directorio de trabajo actual sobre el que no tiene ningún control desde el código de Java.

Suponiendo que ListStopWords.txt está en el mismo paquete que la clase FileLoader:

URL url = getClass().getResource("ListStopWords.txt"); 
File file = new File(url.getPath()); 

O si todo lo que busca es un InputStream de ella:

InputStream input = getClass().getResourceAsStream("ListStopWords.txt"); 

Si el archivo es -como el información sobre el nombre del paquete- es en realidadproperties file (que contiene key=value líneas) con solo la extensión "incorrecta", entonces podría alimentarlo imm editadamente al método load().

Properties properties = new Properties(); 
properties.load(getClass().getResourceAsStream("ListStopWords.txt")); 

Nota: cuando se está tratando de acceder a él desde el interior static contexto, a continuación, utilizar FileLoader.class en lugar de getClass() en los ejemplos anteriores.

+0

¿Se eliminó FileLoader de Java? Estoy tratando de hacer esto desde un contexto estático (java 6) y no puedo encontrar ninguna manera de importarlo y me sigue diciendo que no se puede resolver en un tipo. Curiosamente, se completó automáticamente cuando lo tipeé, pero luego procedió a darme un error. – turbo

+1

oh, se supone que es ClassLoader.class. – turbo

+4

@turbo: 'FileLoader' es la clase personalizada de OP. Se supone que es exactamente esa clase en la que intentas obtener el recurso. Por lo tanto, entonces 'NameOfYourCurrentClass.class.getResourceAsStream (...)'. El 'ClassLoader.class' fallará si la clase' ClassLoader' está siendo cargada por un cargador de clases diferente, lo que puede ocurrir en una aplicación "enterprise" con una jerarquía de múltiples cargadores de clases (como una aplicación web Java EE). – BalusC

3

tratar .\properties\files\ListStopWords.txt

4
InputStream in = FileLoader.class.getResourceAsStream("<relative path from this class to the file to be read>"); 
    try { 
     BufferedReader reader=new BufferedReader(new InputStreamReader(in)); 
     String line=null; 
      while((line=reader.readLine())!=null){ 
       System.out.println(line); 
      } 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+1

¿Qué diablos es FileLoadder ??? –

+1

@IgorGanapolsky es el nombre de Class. Puede referirse al literal '.class' solo proporcionando el nombre completo de su clase. – Tomasz

+0

Creo que pretende ser FileLoader. – jamesdeath123

26

La siguiente línea se puede utilizar si queremos especificar la ruta relativa del archivo.

File file = new File("./properties/files/ListStopWords.txt"); 
+3

puedo saber por qué 3 barras entre el camino. –

+0

Error:> Carácter de escape ilegal en cadena literal. –

+0

¿Cómo convertir esto a un 'InputStream'? –

-1

Si usted está tratando de llamar getClass() del método estático o bloque estático del que puede hacer de la siguiente manera.

Puede llamar al getClass() en el objeto Properties que está cargando.

public static Properties pathProperties = null; 

static { 
    pathProperties = new Properties(); 
    String pathPropertiesFile = "/file.xml; 
    InputStream paths = pathProperties.getClass().getResourceAsStream(pathPropertiesFile); 
} 
+0

Simplemente falta una cotización de cierre. – jamesdeath123

2

Mientras que la respuesta proporcionada por BalusC funciona para este caso, se romperá cuando la ruta del archivo contiene espacios porque en una URL, éstos se están convirtiendo a 20%, que no es un nombre de archivo válido. Si construye el objeto del archivo usando un URI en lugar de una cadena, espacios en blanco serán manejadas correctamente:

URL url = getClass().getResource("ListStopWords.txt"); 
File file = new File(url.toURI()); 
9

La ruta relativa trabaja en en Java utilizando el. operador.

  • . significa la misma carpeta que el contexto actual.
  • .. significa la carpeta principal del contexto que se está ejecutando actualmente.

Así que la pregunta es ¿cómo sabes la ruta en la que se encuentra actualmente el java?

hacer un pequeño experimento

File directory = new File("./"); 
    System.out.println(directory.getAbsolutePath()); 

Observe la salida, se llega a saber el directorio actual en el que Java está mirando. Desde allí, simplemente use el operador ./ para localizar su archivo.

por ejemplo, si la salida es

G:\JAVA8Ws\MyProject\content.

y el archivo está presente en el MiProyecto carpeta basta con utilizar

File resourceFile = new File("../myFile.txt"); 

Esperanza esto ayuda

-1

Si el archivo de texto no está siendo leído, intente utilizar una ruta absoluta más cercana (si desea puede usar la ruta absoluta completa), de esta manera:

FileInputStream fin=new FileInputStream("\\Dash\\src\\RS\\Test.txt"); 

suponer que la ruta absoluta es:

C:\\Folder1\\Folder2\\Dash\\src\\RS\\Test.txt 
0

quería analizar 'command.json' dentro de src/main // js/Simulator.java. Para eso, copié el archivo json en la carpeta src y di la ruta absoluta de esta manera:

Object obj = parser.parse(new FileReader("./src/command.json")); 
Cuestiones relacionadas