Domanda

Ho la directory mappata sulla mia macchina in modo da poter navigare e scrivere su di essa tramite Windows Explorer. Vorrei scrivere file tramite Java.

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

f.createNewFile();

Ricevo il seguente errore:

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)

Esiste un modo per scrivere file in una directory mappata con http: // in primo piano? Perché è così che mi viene fornita la directory. È una directory virtuale che sta creando un database Oracle.

È stato utile?

Soluzione

La mia comprensione è che stai cercando di scrivere a un Oracle XML DB Repository . Oracle XML DB Repository è una funzionalità introdotta da Oracle9i Database Release 2 per l'archiviazione XML e alla quale è possibile accedere tramite FTP o HTTP / WebDAV. Nel tuo caso, sembra che tu stia cercando di utilizzare HTTP / WebDAV.

Come spiegato nella WedDAV su Wikipedia:

  

WedDAV è un set di estensioni attivo   parte superiore di HTTP che consente agli utenti di modificare   e gestire i file in modo collaborativo su   server remoti del World Wide Web.

In altre parole, l'aggiunta di file, la loro eliminazione, la loro ridenominazione, ecc. in un repository WebDAV viene effettuata utilizzando parole HTTP: PUT, DELETE, MOVE, ecc. (vedere RFC 4918 per maggiori dettagli).

Di conseguenza, l'interazione con un server WebDAV può essere eseguita utilizzando le classi da java.net .

Oppure potresti utilizzare un'API di livello superiore come Jakarta Commons HttpClient .

Oppure potresti usare un client Java WebDAV come quello fornito dal progetto Slide . Questo articolo mostra come farlo e sembra semplice. Tuttavia, poiché il progetto Slide è ora in pensione, non lo consiglierei.

Fortunatamente (o no), il progetto Apache Jackrabbit è un'alternativa a Slide ... ma AFAIK il supporto WebDAV in Jackrabbit è più focalizzato sulle implementazioni lato server che sui client. Ad ogni modo, troverai alcuni esempi di codice in questa discussione su la mailing list degli utenti jackrabbit.

Penso che sceglierei HttpClient e utilizzerei Tutorial o il Codice campione come punti di partenza.

Altri suggerimenti

Non sono davvero sicuro di cosa stia parlando qui (non un ragazzo Java) ma sebbene tu possa "averlo mappato" stai passando un URL anziché un percorso del file system previsto. Se (ad esempio) hai un'unità mappata in Windows, usa la lettera di unità assegnata.

Stai tentando di passare l'URI della posizione con un protocollo. Devi passare il protocollo location sans:

  

\\ dev1 \ data \ xml \ myTestFile123.xml

Invece di provare a utilizzare una lettera di unità mappata (sembra molto debole), dai un'occhiata a JCIFS :

  

JCIFS è una libreria client Open Source che implementa il protocollo di rete CIFS / SMB in 100% Java. CIFS è il protocollo standard di condivisione file sulla piattaforma Microsoft Windows (ad es. Map Network Drive ...). Questo client è ampiamente utilizzato nella produzione su Intranet di grandi dimensioni.

Questa parte di codice mostra come accedere a una macchina remota e scrivere file usando jCifs (crediti a 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");
    }
}

Modifica : come menzionato in un commento aggiunto alla domanda originale, la mia comprensione è ora che stai provando a scrivere in una directory WebDAV. Tratterò l'argomento WebDAV in un'altra risposta per maggiore chiarezza.

Come hai mappato il file in Windows? Sospetto che non stia utilizzando il protocollo HTTP, perché non esiste un meccanismo simile per la creazione di file. Quindi non otterrai da nessuna parte usando " http " come protocollo.

Trova la lettera di unità mappata, probabilmente vuoi qualcosa di più simile a:

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

Se stai usando Samba potresti dare un'occhiata a JCIFS , allora puoi usare:

smb://server/share/

Utilizza il percorso locale

Se puoi visualizzare myTestFile123.xml in Windows Explorer, fai clic con il pulsante destro del mouse e copia il valore della proprietà Location: . Quindi utilizza esattamente questo come nuovo argomento File (), ma raddoppia le barre rovesciate o modificale in barre rovesciate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top