如何将 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)