sysLoader.getResource() problem im java
Bin ich mit folgenden Zeilen von code.
sysLoader = (URLClassLoader)Thread.currentThread().getContextClassLoader();
url = sysLoader.getResource("tempFile.txt");
Es gibt ein seltsames problem. Wenn ich dieses von einem Pfad, wo es keine Leerzeichen in den Pfad (Ordnernamen), dann ist es einwandfrei. Aber wenn der Pfad Leerzeichen enthält (Zeile "c:\New Foler..."), dann ist es nicht funktioniert.
Wie man dieses Problem lösen?
EDIT: Im detail - ich inspizierte die sysloader Objekt.
sysloader -> UCP -> Pfad
Ist mit einem Pfad, der mit dem Zeichen %20 anstelle von Leerzeichen
Und damit alle URLs, die null sind.
Wie man dieses Problem beheben?
- Definiere "funktioniert nicht". Hat es wieder
null
? Oder ist das zurückgegebeneURL
Arbeit nicht in irgendeinem Kontext? - Es wird NULL zurückgeben, die in URL -
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist bekannt von Sun/Oracle, Ihren Rat ist die Verwendung von URI-Objekte zu entfernen, die %20-Zeichen:
Statt dies zu tun:
können Sie erzwingen, dass alle %-Escape-Zeichen dekodiert werden, indem zuerst die URL ein URI ist, und verwenden Sie dann die Pfad-Komponente der URL als Dateiname:
URI uri = url.toURI();
FileInputStream fis = new FileInputStream(uri.getPath());
Verwenden
URLDecoder.decode()
Methode zu ersetzen%20
Zeichen durch Leerzeichen.String path = URLDecoder.decode(url.getPath(), "UTF-8");
Bitte beachten Sie auch, dass, wenn die Ressource befindet sich in der jar-Datei, die Sie haben zu handhaben es anders. Sehen Sie z.B. hier: Wie Zugriff auf Ressourcen in einer jar wo Sie vorhanden sein können, in mehrere jar
Um die URL der Datei aus string, wenn der Pfad Leerzeichen enthält, das ist was für mich gearbeitet:
Laut Javadocs,
file.toURL()
ist veraltet:Daher verwendet
file.toURI().toURL()
.Für Java 7+, dies ist der Ansatz kann getroffen werden, stattdessen:
Hinweis: Wenn der Pfad beginnt mit einem
/
es als absoluten anderen als relativen Pfad.