How do I create a new URL
object using a local file, for the purpose of unit tests?
9 Answers
new File(path).toURI().toURL();
-
30
Using Java 11:
Path.of(string).toUri();
Using Java 7:
Paths.get(string).toUri();
To convert to the old-school URL class (why?), add .toURL()
. Note there is a difference in the string output. The modern URI::toString
begins with file:///
(the traditional URL syntax) while the nearly-deprecated URL::toString
with file:/
(the modern URI syntax). Weird 🤷
-
"...a URI begins with file:/// but a URL with file:/ ..." Is that the case for both Windows and Linux? Commented Jul 13, 2015 at 9:19
-
@ptntialunrlsd That is a good question. I haven't checked, but I would guess yes. Commented Jul 13, 2015 at 15:26
-
10No. An URL is just a special case of an URI. A file URI starts with "file://" and then lists the host (generally omitted), followed by "/" and the path "foo/bar" (generally meant to be read as an absolute path). Thus "file:///foo/var". An URI that looks like "file:/foo/bar" is incorrect. See also: file URI scheme Commented Sep 2, 2015 at 14:00
-
@DavidTonhofer Thank you for the explanation of URIs, but that doesn't answer ptntialunrlsd's question. What does '...toURL().toString()' produce on Linux? Also, I've reverted your edits because they made my answer more wordy without changing the meaning. Commented Sep 5, 2015 at 17:16
-
3@AleksandrDubinsky It's best to leave pointers to the Oracle javadoc in though.. easier to click through to
java.nio.file.Paths
. Also, please be sure to make clear that you mean the implementations in "URI vs URL". Anwayjava.net.URL.toString()
produces the same thing on Unix, as it must. It only displays one "/" which is very wrong (see file URI scheme). I guess this is in Java because of reasons, better usejava.net.URI
. It correctly generates "file://[host]/" on a call to.toString()
. Commented Sep 5, 2015 at 21:20
new URL("file:///your/file/here")
-
1where
/your/file/here
is an absolute path to a file on Unix/Linux. On Windows it would be different I think. Commented May 23, 2011 at 14:23 -
7That's not very clever, since you have to handle the escaping of characters which are not allowed in URLs yourself. On Windows (and potentially other operating systems), you also have to modify the path separator from the native path to the file.– jarnbjoCommented May 23, 2011 at 14:25
-
1
-
While this is correct, it is not portable as it depends on absolute paths.– mazunkiCommented May 2, 2020 at 14:59
-
2On Windows the following worked for me:
file:///C:\\file.zip
Commented Apr 15, 2021 at 8:36
have a look here for the full syntax: http://en.wikipedia.org/wiki/File_URI_scheme
for unix-like systems it will be as @Alex said file:///your/file/here
whereas for Windows systems would be file:///c|/path/to/file
-
7Don't do that manually.
File.toURI().toURL()
is the way to go Commented May 23, 2011 at 14:25 -
3@SeanPatrickFloyd sometimes you don't have a choice, like when it is in a
.properties
file.– SledCommented Jan 30, 2014 at 19:24 -
-
2@SeanPatrickFloyd, this question/answer comes up when you search for
java file url
, which in my case means that I was searching for the format of afile://
URL, in Java, for use in a.properties
file, or to type in manually, etc. Commented Apr 28, 2015 at 21:40 -
1@SeanPatrickFloyd sometimes you don't have access to the source code, just to the property, and
file://
is unfortunately necessary. Being system dependent is not such a huge issue since it's a mutable property. Commented Mar 20, 2017 at 11:57
You can also use
[AnyClass].class.getResource(filePath)
-
3
-
2If the "filePath" can be found in a jar, the resulting URL is like
jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt
. Commented Sep 2, 2015 at 14:39
I tried it with Java on Linux. The following possibilities are OK:
file:///home/userId/aaaa.html
file:/home/userId/aaaa.html
file:aaaa.html (if current directory is /home/userId)
not working is:
file://aaaa.html
For Windows: You have use in this way if file is in some drive:
eg.:
Actual link:
"C:\Users\er2\Downloads\Designer3.png"
Converted link:
"file:/C:/Users/er2/Downloads/Designer3.png"
Upvote if worked for you!