Frage

Ich habe das Verzeichnis auf meinem Rechner abgebildet, so dass ich es über den Windows Explorer durchsuchen und schreiben. Ich möchte Dateien über Java schreiben.

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

f.createNewFile();

Ich erhalte die folgende Fehlermeldung:

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)

Gibt es eine Möglichkeit, um Dateien auf einem zugeordneten Verzeichnis zu schreiben, die den http hat: // vor? Denn das ist die Art und Weise des Verzeichnis mir zur Verfügung gestellt. Es ist ein virtuelles Verzeichnis, das eine Oracle-Datenbank erstellt wird.

War es hilfreich?

Lösung

Mein Verständnis ist, dass Sie auf ein Oracle XML DB Repository . Oracle XML DB Repository ist eine Funktion, die von Oracle9i Database Release 2 für XML-Speicher eingeführt wurde, und das kann über FTP oder HTTP / WebDAV zugegriffen werden. In Ihrem Fall sieht es aus wie Sie versuchen, HTTP / WebDAV zu verwenden.

Wie in der WedDAV Seite auf Wikipedia:

  

WedDAV ist eine Reihe von Erweiterungen auf   Anfang der HTTP, mit dem Benutzer bearbeiten   und Verwalten von Dateien gemeinsam an   Fern World Wide Web-Server.

Mit anderen Worten, das Hinzufügen von Dateien, sie zu löschen, umbenennen sie, etc in einer WebDAV-Repository über HTTP Worte getan: PUT, DELETE, MOVE, usw. (siehe RFC 4918 für weitere Details).

Folglich mit einem WebDAV-Server interagiert werden kann mithilfe von Klassen von java.net getan.

Sie können auch eine höhere Level-API wie Jakarta Commons verwenden Httpclient .

Sie können auch ein Java WebDAV-Client, wie der von der Projekt Schieben . Diese Artikel rel="nofollow zeigt, wie es geht und es sieht einfach. Da jedoch das Slide-Projekt jetzt im Ruhestand ist, würde ich es nicht empfehlen.

Zum Glück (oder nicht), das Apache Jackrabbit Projekt ist eine Alternative zu schieben ... aber AFAIK die WebDAV-Unterstützung in Hase konzentriert sich mehr auf die serverseitige Implementierungen als Kunden. Wie auch immer, werden Sie einige Code-Beispiele in diesen Thread finden auf die hase-Benutzer-Mailingliste.

Ich glaube, ich Httpclient wählen würde und verwenden Sie die Tutorial oder Beispielcode als Ausgangspunkte.

Andere Tipps

Ich bin nicht wirklich sicher, was ich rede hier (kein Java Typ), aber Sie können sie aber möglicherweise „haben es kartiert“ Sie in einer URL vorbei sind anstelle eines erwarteten Dateisystempfad. Wenn (zum Beispiel) Sie ein zugeordnetes Laufwerk unter Windows haben, verwenden Sie die Laufwerksbuchstabe zugewiesen.

Ihr Versuch, die Lage URI mit einem Protokoll zu übergeben. Sie müssen Lage sans-Protokoll übergeben:

  

\\ dev1 \ data \ xml \ myTestFile123.xml

Statt einen zugeordneten Laufwerksbuchstaben (scheint sehr schwach) zu verwenden, zu versuchen, einen Blick auf JCIFS :

  

JCIFS ist eine Open Source-Client-Bibliothek, die das CIFS / SMB-Netzwerkprotokoll in 100% Java implementiert. CIFS ist das Standard-File-Sharing-Protokoll auf der Microsoft Windows-Plattform (zum Beispiel Netzlaufwerk verbinden ...). Dieser Client wird extensiv in der Produktion auf große Intranets eingesetzt.

Dieses Stück Code zeigt, wie Anmeldung zu einem Remote-Computer und schreibt Datei mit jCIFS (Kredite 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");
    }
}

Bearbeiten : Wie in einem Kommentar erwähnt hinzugefügt, um die ursprünglichen Frage, mein Verständnis ist jetzt, dass Sie zu einem WebDAV-Verzeichnis zu schreiben versuchen. Ich werde das WebDAV-Thema in einer anderen Antwort für mehr Klarheit abdecken.

Wie haben Sie die Datei in Windows abgebildet? Ich vermute, es ist nicht das HTTP-Protokoll verwenden, da kein solcher Mechanismus für die Erstellung von Dateien vorhanden ist. So werden Sie nicht überall mit „http“ als Protokoll erhalten.

Hier finden Sie die Laufwerkbuchstaben, Sie wollen wahrscheinlich etwas mehr wie:

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

Wenn Sie Samba verwenden Sie vielleicht einen Blick auf JCIFS dann können Sie aufnehmen möchten verwenden:

smb://server/share/

Verwenden Sie den lokalen Pfad

Wenn Sie myTestFile123.xml in Windows Explorer sehen können, dann Sie mit der rechten Maustaste und die Location: Eigenschaftswert kopieren. Dann nutzen genau diese als neue Datei () Argument, aber entweder verdoppeln die Schrägstriche oder sich Slashes ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top