The method FileLocator.resolve(url)
can be used to translate an address bundleentry://something/somewhere/x.txt
to a proper file URL for /mnt/foo/somewhere/x.txt
.
However, which is also documented at https://bugs.eclipse.org/bugs/show_bug.cgi?id=145096, the URL is not escaped. As an example, if the Eclipse installation containing the referenced bundle is in a directory containing a space, the URL returned by FileLocator.resolve
still contains the space and calling url.toURI()
fails because of that.
File
object based on a path relative to the current
bundle?As reference, here is the code that fails when trying to find the directory dir
inside my plugin's .jar
file if that file is in a directory containing a space:
final IPath pathOfExampleProject = new Path("dir");
final Bundle bundle = Platform.getBundle(AproveIDs.PLUGIN_ID);
final URL url = FileLocator.find(bundle, pathOfExampleProject, null);
final URL url2 = FileLocator.toFileURL(url);
url2.toURI(); // Illegal character in path at index [...]
I just found this code:
http://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/model/BundledSystemLibrary.java?r=2057
The relevant lines indeed help:
// We need to use the 3-arg constructor of URI in order to properly escape file system chars.
URI resolvedUri = new URI(resolvedUrl.getProtocol(), resolvedUrl.getPath(), null);
Two additional notes:
URI resolvedUri = URI.createFileURI(resolved.getPath());
To get the file name, call resolvedUri.toFileString();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With