로컬 파일을 Java의 URL로 전달


175

URL단위 테스트를 위해 로컬 파일을 사용하여 새 객체를 어떻게 만듭니 까?

답변:


283
new File(path).toURI().toURL();

22
Java 7+의 경우 : Paths.get ( "path", "to", "stuff"). toUri (). toURL ()
Ajax

46

자바 7 사용 :

Paths.get(string).toUri().toURL();

그러나 아마도을 얻고 싶을 것입니다 URI. 예를 들어,로 URI시작 file:///하지만 URL은 file:/(적어도 그것이 toString생산하는 것입니다)입니다.


"... URI는 file : ///로 시작하지만 URL은 file : / ..."입니다. Windows와 Linux 모두에 해당됩니까?
ptntialunrlsd

@ptntialunrlsd 좋은 질문입니다. 확인하지는 않았지만 예라고 생각합니다.
Aleksandr Dubinsky

7
아니요. URL은 URI의 특수한 경우입니다. 파일 URI는 "file : //"로 시작한 다음 호스트 (일반적으로 생략 됨)와 "/"및 "foo / bar"경로 (일반적으로 절대 경로로 읽습니다)를 나열합니다. 따라서 "file : /// foo / var"입니다. "file : / foo / bar"와 같은 URI가 올바르지 않습니다. 참조 : 파일 URI 체계
David Tonhofer

@DavidTonhofer URI에 대해 설명해 주셔서 감사하지만 ptntialunrlsd 의 질문에 대한 답변은 아닙니다 . '... toURL (). toString ()'은 Linux에서 무엇을 생성합니까? 또한 의미를 변경하지 않고 내 대답을 더 현명하게 만들었으므로 편집 내용을 되돌 렸습니다.
Aleksandr Dubinsky

3
@AleksandrDubinsky 그래도 Oracle javadoc에 대한 포인터를 남겨 두는 것이 가장 좋습니다 java.nio.file.Paths. 또한 "URI vs URL"에서 의 구현 을 의미해야합니다 . Anway java.net.URL.toString()는 Unix에서도 동일한 것을 생성합니다. 매우 잘못된 하나의 "/"만 표시합니다 ( 파일 URI 체계 참조 ). 나는 이것이 더 나은 이유 때문에 Java에 있다고 생각합니다 java.net.URI. 호출시 "file : // [host] /"를 올바르게 생성합니다 .toString().
David Tonhofer


21
new URL("file:///your/file/here")

1
여기서 /your/file/hereUnix / Linux에서 파일의 절대 경로입니다. Windows에서는 다르게 생각합니다.
Robin Green

5
URL에서 허용되지 않는 문자 이스케이프를 처리해야하기 때문에 그렇게 영리하지는 않습니다. Windows (및 잠재적으로 다른 운영 체제)에서는 기본 경로에서 파일로 경로 구분 기호도 수정해야합니다.
jarnbjo

new URL("file:my.properties");
weberjn

이것이 정확하지만 절대 경로에 의존하기 때문에 이식성이 없습니다.
mazunki


5

유닉스 계열 시스템의 경우 http://en.wikipedia.org/wiki/File_URI_scheme 에서 전체 구문을 살펴보십시오 file:///your/file/here.Windows 시스템의 경우 @Alex가 말한 것처럼file:///c|/path/to/file


7
수동으로하지 마십시오. File.toURI().toURL()가는 길입니다
Sean Patrick Floyd

3
@SeanPatrickFloyd .properties파일 에있을 때와 같이 선택 사항이없는 경우가 있습니다.
Sled

@ArtB 나는 그것이 어떻게 차이를 만드는지 모르겠다
Sean Patrick Floyd

2
@SeanPatrickFloyd,이 질문 / 답변은을 검색 할 때 나타납니다 java file url. 제 경우에는 file://URL 형식 , Java, .properties파일 에 사용하기 위해 또는 파일에 수동으로 입력하는 등을 검색하고
있었습니다

1
@SeanPatrickFloyd 때로는 소스 코드에 액세스 할 수 없으며 속성에 액세스 할 수 없으므로 file://불행히도 필요합니다. 시스템에 의존한다는 것은 변경 가능한 속성이기 때문에 큰 문제가 아닙니다.
vikingsteve

4

당신은 또한 사용할 수 있습니다

[AnyClass].class.getResource(filePath)

2
그러나 해당 파일이 클래스 경로 내에 존재하는 경우에만
aepurniet

1
jar에서 "filePath"를 찾을 수 있으면 결과 URL은 jar:file:/home/user/a/b/c/foo.jar!/com/example/stuff/config.txt입니다.
David Tonhofer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.