2010-06-23 9 views
6

Este código de Java enumera los archivos en un directorio en una unidad compartida de Windows. ¿Funcionará correctamente en un sistema Unix?¿Funcionará esto en Unix?

File directory = new File("\\\\server/Shared/stuff/mystuff"); 
for (File file: directory.listFiles()) { 
    System.out.println(file); 
} 
+0

¿Con tokens mixtos separadores de archivos como ese? Me sorprendería muchísimo ver que funciona. –

+0

Es posible que desee hacer referencia a esta pregunta --- http://stackoverflow.com/questions/3100625/how-can-i-read-from-a-windows-shared-drive-in-a-platform-independent-way -using-ja – Bill

+2

¿Por qué no lo intentas? – Anders

Respuesta

8

Respuesta corta: No.

Respuesta larga: ¿Tiene instalado samba? Incluso entonces necesitas montar la parte. Entonces probablemente no funcionará.

EDIT

delegados Java realiza la llamada al sistema operativo subyacente con el tiempo. Como Unix no sabe lo que significa la ruta \\SERVERNAME, Java tampoco sabe lo que significa. Lo que tienes que hacer, para que esto funcione, es montar la unidad de forma explícita usando Samba. Su otra opción, si está ejecutando Ubuntu, es buscar en .gvfs en su directorio home. Ubuntu crea un montaje para tus recursos compartidos de Samba, a los que deberías poder acceder usando Java. Si no desea confiar en herramientas externas, intente con JCIFS para obtener una solución pura de Java.

1

No, ya que es una ruta UNC, que es un windowsism.

¿Está intentando acceder a un recurso compartido de Windows desde Unix? Luego echa un vistazo a jcifs.

2

En mi sistema (Debian Sid con Gnome 2.30 Desktop) tengo que seleccionar "smb: /// server/Shared/..." para lograr el mismo comportamiento. Creo que GVFS (Gnome Virtual File System) que utiliza controladores smbfs maneja la conexión real en segundo plano ...

3

No ... Simplemente deje que el usuario seleccione la ruta correcta y use un cuadro de diálogo de selección de archivos dependiente del sistema operativo .

1

La pregunta contraria que consigo al ver esto es: "¿Por qué querrías codificar una ruta en tu aplicación?"

Incluso si fue solo por el ejemplo y tiene la intención de cargar la ruta desde un archivo de propiedad o algo así, todavía creo que está en la pista incorrecta aquí.

En primer lugar, querrás evitar rutas absolutas como la peste. Las rutas relativas son un poco buenas. Puede usar caracteres de barra ('/') en las rutas de acceso codificadas, funcionará tanto en Windows como en Linux/Mac. Básicamente todas las plataformas.

En segundo lugar, ¿por qué utilizar rutas en absoluto? Esta es la era de Internet. ¡Usa las URL! archivo: las URL lograrán lo mismo que las rutas de archivos, pero al usar URL harán que su aplicación acepte recursos de otras fuentes, como sitios web y FTP.

En tercer lugar, evite la clase de archivo. Si inventas una buena manera de hacerlo, estás fuera de las fábricas de madera por completo. Use las URL junto con getResource y getResourceAsStream y su aplicación funcionará independientemente de la plataforma y entre los límites de la red a través de Internet.

Cuestiones relacionadas