2012-07-22 23 views
5

Estoy usando JCIFS en mi nuevo proyecto de Android. De alguna manera, he decidido usar la clase URL para generalizar la ruta del archivo (para poder agregar más protocolo más adelante). Lo que hice es como sigueUso del protocolo SMB en la URL al usar la biblioteca JCIFS en Android

URL url = new URL("smb://192.168.1.1/filepath"); 

Y luego se lanza la excepción java.net.MalformedURLException.

Exception in thread "main" java.net.MalformedURLException: unknown protocol: smb 
    at java.net.URL.<init>(URL.java:184) 
    at java.net.URL.<init>(URL.java:127) 

Consulting JCIFS FAQ revela que tengo que registrar el protocolo antes de usar la clase. Sin embargo, realmente no sé cómo hacerlo en Android. Creo que la biblioteca ya lo hace, pero no en Android.

¿Qué debo hacer?

+0

¿Dónde pusiste el archivo jcifs Jar? Debe estar en la ruta de clases adecuada para que se cargue el controlador. – medopal

+0

Pongo el archivo jar en el directorio/libs del proyecto, que creo que no está en el classpath. Y creo que Android maneja classpath de forma diferente a la aplicación Java normal. –

Respuesta

0

No utilice un objeto de URL. Pase la URL directamente al constructor SmbFile. Por ejemplo:

SmbFile file = new SmbFile("smb://192.168.1.1/filepath"); 

Luego puede hacer casi todo lo que puede hacer con un archivo común.

+0

La razón por la que uso el objeto URL es que también quiero admitir otro protocolo (y sistema de archivos local). Usar la URL puede hacer que se vuelva más abstracto entre los protocolos. También quiero usar el objeto Serilizable para pasar de Actividades, que SmbFile no es. –

+0

Suena bien, ¡me alegra que lo hayas descifrado! – 11101101b

5

Acabo de ver el uso en referencia JCIFS, en la referencia de SmbFile.

Cuando se utiliza la clase java.net.URL con 'smb: //' URLs es necesario para llamar primero la jcifs.Config.registerSmbURLHandler estática(); método. Esto es necesario para registrar el controlador de protocolo SMB.

Así que agrego esta llamada y funciona correctamente.

+0

Javadoc: [http://stderr.org/doc/libjcifs-java-doc/api/jcifs/Config.html#registerSmbURLHandler()](http://stderr.org/doc/libjcifs-java-doc/api /jcifs/Config.html#registerSmbURLHandler()) –

+0

El enlace anterior no está disponible, use https://jcifs.samba.org/src/docs/api/jcifs/Config.html#registerSmbURLHandler%28%29 en su lugar – jneira

Cuestiones relacionadas