Question

Le répertoire est mappé sur ma machine pour pouvoir y naviguer et y écrire via l'explorateur Windows. Je voudrais écrire des fichiers via Java.

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

f.createNewFile();

Je reçois le message d'erreur suivant:

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)

Existe-t-il un moyen d'écrire des fichiers dans un répertoire mappé précédé de http: //? Parce que c'est la façon dont le répertoire m'a été fourni. C’est un répertoire virtuel créé par une base de données Oracle.

Était-ce utile?

La solution

Je crois comprendre que vous essayez d'écrire sur un Référentiel de base de données Oracle XML . Oracle XML DB Repository est une fonctionnalité introduite par Oracle9i Database Release 2 pour le stockage XML et accessible via FTP ou HTTP / WebDAV. Dans votre cas, il semblerait que vous essayiez d'utiliser HTTP / WebDAV.

Comme expliqué dans la page WedDAV sur Wikipedia:

  

WedDAV est un ensemble d’extensions sur   haut de HTTP qui permet aux utilisateurs de modifier   et gérer les fichiers en collaboration sur   serveurs Web étendus.

En d'autres termes, ajouter des fichiers, les supprimer, les renommer, etc. dans un référentiel WebDAV se fait à l'aide de mots HTTP: PUT, DELETE, MOVE, etc. (voir RFC 4918 pour plus de détails).

Par conséquent, il est possible d'interagir avec un serveur WebDAV à l'aide de classes de java.net .

Vous pouvez également utiliser une API de niveau supérieur, telle que Jakarta Commons HttpClient .

Vous pouvez également utiliser un client Java WebDAV similaire à celui fourni par le projet Slide . Cet article montre comment le faire et en avoir l'air. simple. Cependant, comme le projet Slide est maintenant retiré, je ne le recommanderais pas.

Heureusement (ou pas), le projet Apache Jackrabbit est une alternative à Slide ... La prise en charge de WebDAV dans Jackrabbit est davantage axée sur les implémentations côté serveur que sur les clients. Quoi qu'il en soit, vous trouverez des exemples de code dans ce fil sur la liste de diffusion jackrabbit-users.

Je pense que je choisirais HttpClient et utiliserais le Didacticiel . ou le exemple de code en tant que points de départ.

Autres conseils

Je ne suis pas vraiment sûr de ce dont je parle (pas d'un gars de Java), mais vous pouvez le faire "cartographier". vous passez une URL au lieu d'un chemin de système de fichiers attendu. Si, par exemple, vous avez un lecteur mappé sous Windows, utilisez la lettre de lecteur attribuée.

Vous essayez de transmettre l'URI d'emplacement avec un protocole. Vous devez passer location sans protocole:

  

\\ dev1 \ data \ xml \ myTestFile123.xml

Au lieu d'essayer d'utiliser une lettre de lecteur mappée (semble très faible), consultez JCIFS . :

  

JCIFS est une bibliothèque client Open Source qui implémente le protocole réseau CIFS / SMB en mode 100% Java. CIFS est le protocole de partage de fichiers standard sur la plate-forme Microsoft Windows (par exemple, Map Network Drive ...). Ce client est largement utilisé en production sur de grands intranets.

Ce morceau de code montre comment Ouvrir une session sur une machine distante et écrire un fichier à l'aide de jCifs (crédits de 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");
    }
}

Modifier : comme indiqué dans un commentaire ajouté à la question d'origine, j'ai cru comprendre que vous essayez maintenant d'écrire dans un répertoire WebDAV. Je couvrirai le sujet WebDAV dans une autre réponse pour plus de clarté.

Comment avez-vous mappé le fichier dans Windows? Je soupçonne qu'il n'utilise pas le protocole HTTP, car un tel mécanisme n'existe pas pour créer des fichiers. Ainsi, vous n'irez nulle part en utilisant "http". comme votre protocole.

Recherchez la lettre de lecteur mappée. Vous voulez probablement quelque chose de plus semblable à:

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

Si vous utilisez Samba, vous voudrez peut-être consulter JCIFS , vous pouvez utiliser:

smb://server/share/

Utilisez le chemin local

Si vous pouvez voir myTestFile123.xml dans l'explorateur Windows, cliquez dessus avec le bouton droit de la souris et copiez la valeur de la propriété Location: . Utilisez ensuite exactement ceci comme nouvel argument File (), mais doublez les barres obliques inverses ou modifiez-les en barres obliques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top