2016-08-03 10 views
-1

Wenn ich versuche, die JAR-Datei im UNC-Pfad zu verwenden, finde ich ein Problem. Der Konstruktor java.io.file konvertiert immer einen UNC-Dateipfad in den lokalen Pfad.Java.io.file Konstruktor mit UNC Dateipfad umgehen

Zum Beispiel versuche ich

String dirStr = "file:\\\\dir1\dir2\file.jar!Myclass"; 
File ff = new File(dirStr); 
System.out.println(ff.toString()); 

Ich werde eine Ausgabe wie bekommen: file:\dir1\dir2\file.jar!Myclass. Aber was ich erwarte, ist file:\\dir1\dir2\file.jar!MyClass.

Ich habe versucht, mehr Schrägstriche in dirStr hinzuzufügen, aber es kann nicht funktionieren. Weil in der java.io.file, wird es Methode aufrufen, doppelte Schrägstriche zu entfernen.

Und ich versuche, die URI zu verwenden, um die ff zu erstellen. Aber die Ausgabe wird \dir1\dir2\file.jar!Myclass sein, die nicht verfügbar ist, um JAR-Datei erfolgreich zu verwenden. Ich denke, die Form von JAR muss mit dem file: Protokoll beginnen, um die Zeichenkette zu verwenden, die mit ! in der oben genannten Zeichenkette \dir1\dir2\file.jar!Myclass endet.

Gibt es eine Möglichkeit new File() kann den Pfad von File, das heißt ff, wie file:\\dir1\dir2\file.jar!MyClass zu bekommen.

+0

Ich denke, das Präfix 'file:' wird normalerweise für lokale Pfade verwendet. Ein UNC-Pfad ist kein lokaler Pfad. Versuchen Sie es mit dem 'file:' - Präfix, also '\\ dir1 \ dir2 \ file.jar! MyClass'. Sie können auch mit Schrägstrichen versuchen, '//dir1/dir2/file.jar! MyClass' – janos

+0

Warum denken Sie, müssen Sie eine URL zu einem' Datei' Konstruktor liefern? Du kannst nicht, und du musst nicht. Unklar, was du hier wirklich fragst. – EJP

+0

Weil ich die JAR-Datei im UNC-Pfad verwenden muss. Wenn Ihr Java-CLASSPATH den Remote-UNC-Pfad enthält, wird dieses Problem auftreten. Es wird die JAR-Datei wie "dirStr" analysieren. –

Antwort

0

Da Ihre Eingabe dir String UNC-Typ ist, sollten Sie Java URI verwenden.
Beispielcode:

URI uri = new URI(dirStr); 
System.out.println(uri.toString()); // If you want to get the path as URI 
File ff = new File(uri.getPath()); // If you want to access the file. 


Der andere besseren Weg Pfad verwendet:

URI uri = new URI(dirStr); 
Path path = Paths.get(uri); // Or directly Path path = Paths.get(dirStr); 
File ff = path.toFile(); // << your file here 
path.toUri(); // << your uri path here 
+0

Ich habe diesen Code ausprobiert, das 'ff' wird wie folgt aussehen:' \\ dir1 \ dir2 \ file.jar! MyClass' ohne 'file:'. –

+0

So gehen Sie einfach 'uri.toString()'. – Minh

+0

Ich habe den Beispielcode bearbeitet, also schaut euch das bitte an. – Minh

0

Der Konstruktor File(String) nimmt einen Pfad, kein URL. Entfernen Sie den file:-Teil und verwenden Sie zwei umgekehrte Schrägstriche für jeden im tatsächlichen Dateinamen, um die Escaping-Regeln des Compilers zu erfüllen. Oder verwenden Sie die korrekte Anzahl von Schrägstrichen.

+0

Tatsächlich habe ich keine URL, sondern URI verwendet. –

+0

Und wenn ich die 'file:' entferne, wird es die JAR-Datei nicht finden können. Ich denke, es liegt daran, dass hinter der Zeichenfolge '.jar' ein'! 'Steht. –

+0

Wenn Sie 'file:' haben müssen, sollten Sie 'File' nicht verwenden. Die beiden gehen nicht zusammen, wie ich bereits gesagt habe. – EJP