Estoy intentando construir un objeto de archivo Java basado en un nombre de archivo proporcionado por el usuario (podría ser absoluto o relativo) y un directorio base dependiente del entorno. El documento java para java.io.File (padre del archivo, Cadena niño) dice lo siguiente:java.io.File (principal, secundario) no funciona como se esperaba
Si la cadena de nombre de ruta absoluta niño es entonces se convierte en una ruta relativa de una manera dependiente del sistema.
que me hizo pensar que si tengo el siguiente código:
public class TestClass {
public static void main(String[] args) throws IOException {
File file = new File(new File("C:/Temp"),"C:/Temp/file.txt");
System.out.println(file.getAbsolutePath());
}
}
la salida sería
C:\Temp\file.txt
y entonces estaría en el negocio, ya que no sería realmente importa más si el usuario proporcionó una ruta absoluta o relativa. Pero, de hecho, la salida es
C:\Temp\C:\Temp\file.txt
Lo que significa que tengo que averiguar la ruta relativa exacta (o al menos prueba diferentes opciones para ver si existe el archivo). ¿Estoy entendiendo mal el JavaDoc?
El nombre de ruta hijo tiene que ser un nombre de ruta relativo. La conversión habla de barras contra barras invertidas, creo. En tu caso, tendrías que averiguar si la ruta es absoluta antes de continuar. – Thilo
¿El comportamiento es el mismo si usa los (más correctos) '" C: \\ Temp "' y '" C: \\ Temp \\ file.txt "' en lugar de usar reenvíos? No tengo una PC con Windows con un JDK instalado aquí en este momento, así que no puedo probar esto. Además, ¿qué significa 'nuevo archivo (" C:/Temp "). IsAbsolute()' print? –
@Joachim: Ambos '" C:/Temp "' y '" C: \\ Temp "' son tratados de la misma manera. 'nuevo archivo (" C:/Temp "). isAbsolute()' imprime 'true'. – Geert