如何将 URL 字符串转换为 Android 中的 java.io.File
How to convert URL string into java.io.File in Android
我正在覆盖自定义 class 中的 android.webkit.WebViewClient
方法 shouldInterceptRequest(WebView view, String url)
。在某些情况下,url
参数指向加密的本地文件,格式为 file:///path/to/file.extension
。我需要将字符串 url
转换为 java.io.File
来解密它。
如何可靠地将 url
参数转换为有效路径以传递到 new File(path)
?
使用以下代码:
new File(new URL(url).toURI());
但这只有在 URL 不是分层的情况下才有效,这就是你的情况。 (例如,如果 URL 指向 JAR 文件中的文件,则不能这样做)。
文件构造函数确实接受 URI,所以尝试类似的东西:
File file = new File(new URL("file:///path/to/file.extension").toURI());
System.out.println(file);
Output:
\path\to\file.extension
对于 Kotlin 你可以使用 apply
它定义了所有类型的扩展函数。当您调用它时,它会调用传入参数的闭包,然后 returns 闭包 运行 上的接收者对象。
File(dir).apply { mkdirs() }
以上代码将字符串转换为文件对象,对其调用 mkdirs(),然后 returns 文件。
File makeDir(String path) {
File result = new File(path);
result.mkdirs();
return result;
}
apply()
将这种无处不在的代码变成了一行代码。
你也可以这样做
File("path_to_file").apply {parentFile.mkdirs()}.writeBytes(bytes)
我正在覆盖自定义 class 中的 android.webkit.WebViewClient
方法 shouldInterceptRequest(WebView view, String url)
。在某些情况下,url
参数指向加密的本地文件,格式为 file:///path/to/file.extension
。我需要将字符串 url
转换为 java.io.File
来解密它。
如何可靠地将 url
参数转换为有效路径以传递到 new File(path)
?
使用以下代码:
new File(new URL(url).toURI());
但这只有在 URL 不是分层的情况下才有效,这就是你的情况。 (例如,如果 URL 指向 JAR 文件中的文件,则不能这样做)。
文件构造函数确实接受 URI,所以尝试类似的东西:
File file = new File(new URL("file:///path/to/file.extension").toURI());
System.out.println(file);
Output:
\path\to\file.extension
对于 Kotlin 你可以使用 apply
它定义了所有类型的扩展函数。当您调用它时,它会调用传入参数的闭包,然后 returns 闭包 运行 上的接收者对象。
File(dir).apply { mkdirs() }
以上代码将字符串转换为文件对象,对其调用 mkdirs(),然后 returns 文件。
File makeDir(String path) {
File result = new File(path);
result.mkdirs();
return result;
}
apply()
将这种无处不在的代码变成了一行代码。
你也可以这样做
File("path_to_file").apply {parentFile.mkdirs()}.writeBytes(bytes)