Pregunta

Tengo el directorio asignado en mi máquina para poder navegar y escribir en él a través del explorador de Windows. Me gustaría escribir archivos a través de java.

File f = new File("http://dev1:8080/data/xml/myTestFile123.xml");

f.createNewFile();

Recibo el siguiente error:

Exception in thread "main" java.io.IOException: The filename, directory name, or volume label syntax is incorrect
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(Unknown Source)
    at MainTest.createTestFile(MainTest.java:156)
    at MainTest.main(MainTest.java:72)

¿Hay alguna forma de escribir archivos en un directorio asignado que tenga http: // al frente? Porque esa es la forma en que se me proporciona el directorio. Es un directorio virtual que está creando una base de datos de Oracle.

¿Fue útil?

Solución

Entiendo que está tratando de escribir en un Oracle XML DB Repository . Oracle XML DB Repository es una característica que ha sido introducida por Oracle9i Database Release 2 para almacenamiento XML y que se puede acceder a través de FTP o HTTP / WebDAV. En su caso, parece que está intentando usar HTTP / WebDAV.

Como se explica en la página WedDAV en Wikipedia:

  

WedDAV es un conjunto de extensiones en   parte superior de HTTP que permite a los usuarios editar   y administrar archivos en colaboración en   servidores remotos de la World Wide Web.

En otras palabras, agregar archivos, eliminarlos, cambiarles el nombre, etc. en un repositorio WebDAV se realiza mediante palabras HTTP: PUT, DELETE, MOVE, etc. (consulte RFC 4918 para obtener más detalles).

En consecuencia, la interacción con un servidor WebDAV se puede hacer usando clases de java.net .

O puede usar una API de nivel superior como HttpClient de Jakarta Commons .

O podría usar un cliente Java WebDAV como el proporcionado por el proyecto Slide . Este artículo muestra cómo hacerlo y su aspecto sencillo. Sin embargo, como el proyecto Slide ahora está retirado, no lo recomendaría.

Afortunadamente (o no), el proyecto Apache Jackrabbit es una alternativa a Slide, pero AFAIK El soporte de WebDAV en Jackrabbit está más enfocado en las implementaciones del lado del servidor que los clientes. De todos modos, encontrará algunos ejemplos de código en este hilo en la lista de correo de los usuarios de jackrabbit.

Creo que elegiría HttpClient y utilizaría Tutorial o el Código de muestra como puntos de partida.

Otros consejos

No estoy realmente seguro de lo que estoy hablando aquí (no es un chico de Java) pero aunque puede "tenerlo mapeado" está pasando una URL en lugar de una ruta del sistema de archivos esperada. Si (por ejemplo) tiene una unidad asignada en Windows, use la letra de unidad asignada.

Estás intentando pasar el URI de ubicación con un protocolo. Debe pasar la ubicación sin el protocolo:

  

\\ dev1 \ data \ xml \ myTestFile123.xml

En lugar de intentar usar una letra de unidad asignada (parece muy débil), eche un vistazo a JCIFS :

  

JCIFS es una biblioteca cliente de código abierto que implementa el protocolo de red CIFS / SMB en 100% Java. CIFS es el protocolo estándar para compartir archivos en la plataforma Microsoft Windows (por ejemplo, Map Network Drive ...). Este cliente se utiliza ampliamente en la producción en grandes intranets.

Este fragmento de código muestra cómo iniciar sesión en una máquina remota y escribir un archivo utilizando jCifs (créditos para Muneeb Ahmad):

import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;

public class Logon {
    public static void main( String argv[] ) throws Exception {
        String user = "user:password";
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);
        String path = "smb://my_machine_name/D/MyDev/test.txt";
        SmbFile sFile = new SmbFile(path, auth);
        SmbFileOutputStream sfos = new SmbFileOutputStream(sFile);
        sfos.write("Muneeb Ahmad".getBytes());
        System.out.println("Done");
    }
}

Editar : Como se mencionó en un comentario agregado a la pregunta original, entiendo que ahora está intentando escribir en un directorio WebDAV. Cubriré el tema de WebDAV en otra respuesta para mayor claridad.

¿Cómo has mapeado el archivo en Windows? Sospecho que no está utilizando el protocolo HTTP, porque no existe tal mecanismo para crear archivos. Así que no llegarás a ninguna parte usando " http " como su protocolo.

Busque la letra de la unidad asignada, probablemente desee algo más como:

File f = new File("F:\\dir\\file.ext");

Si está utilizando Samba, puede echar un vistazo a JCIFS y luego puede usar:

smb://server/share/

Usar la ruta local

Si puede ver myTestFile123.xml en Windows Explorer, haga clic con el botón derecho y copie el valor de la propiedad Location: . Luego use exactamente esto como el nuevo argumento Archivo (), pero doble las barras invertidas o cámbielas a barras diagonales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top