File.toURL()
の代わりにFile.toURI().toURL()
が推奨されています。 (私はJava 8を使用しています)File.toURI()。toURL()はどのように例外をスローできますか?
URI.toURL()
はMalformedURLException
(extend IOException
)を投げることができます。
File.toURI().toURL()
はどのような条件で例外をスローすることができますか?
File.toURL()
の代わりにFile.toURI().toURL()
が推奨されています。 (私はJava 8を使用しています)File.toURI()。toURL()はどのように例外をスローできますか?
URI.toURL()
はMalformedURLException
(extend IOException
)を投げることができます。
File.toURI().toURL()
はどのような条件で例外をスローすることができますか?
技術的に可能です。たとえば、このプログラムを考えてみます。
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
public class Test {
public static void main(String[] args) throws MalformedURLException {
URL.setURLStreamHandlerFactory(protocol -> {
throw new UnsupportedOperationException();
});
System.out.println(new File("/etc/passwd").toURI().toURL());
}
}
ここtoURL
呼び出しは、実際にMalformedURLException
で失敗します。
Exception in thread "main" java.net.MalformedURLException
at java.net.URL.<init>(URL.java:627)
at java.net.URL.<init>(URL.java:490)
at java.net.URL.<init>(URL.java:439)
at java.net.URI.toURL(URI.java:1089)
at com.example.Test.main(Test.java:20)
Caused by: java.lang.UnsupportedOperationException
at com.example.Test.lambda$main$0(Test.java:17)
at java.net.URL.getURLStreamHandler(URL.java:1142)
at java.net.URL.<init>(URL.java:599)
... 4 more
私はあなたにもfile
をサポートしていないカスタムURLStreamHandlerFactory
を設定した場合、プログラムはとにかく正しく機能することを疑うがスキーム。
デフォルトでは、toURL
が失敗する可能性があるので、私は考えることも思い出せません。URLStreamHandlerFactory
を混乱させないと、安全に使うことができます。
public class FileUtils {
public static URL toURL(File file) {
try {
return file.toURI().toURL();
} catch (MalformedURLException e) {
throw new InternalError(e);
}
}
}
を、どこでもそれを使用する:あなたは、多くの場合、URL
オブジェクトを生成する必要がある場合は
、あなたはこのようないくつかのユーティリティメソッドを作成することを検討します。プログラムではMalformedURLException
が不可能であると主張しているので、実際に発生すると内部プログラムエラーとみなされます。
もう1つの可能性は、URL
クラスをまったく使用しないことです。多くの目的のために、代わりにURI
クラスを使用することができます。
答えを読む前に、私は 'URL.setURLStreamHandlerFactory()'について知りませんでした。優れた。 – kevinarpe