1

我有一些遗留代码正在调用sun.net.www.ParseUtil.decode(). 我想避免调用供应商特定的函数,所以我想用其他东西替换调用。

我可以使用 java.net.URLDecoder.decode() 作为替代品还是我应该注意什么?

该调用用于将文件 URL 转换为自定义类加载器中的正常路径:

URL url = //...
if(url.getProtocol().equals("file"))) {
    String path = url.getFile().replace('/', File.separatorChar);
    path = ParseUtil.decode(path);
    if (path.endsWith(File.separator)){
       path += "-";
    }
    p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
 }

(请注意,这与 中的代码几乎完全相同java.net.UrlClassLoader.getPermissions()

4

2 回答 2

2

很难说,因为 的语义ParseUtil没有很好的记录。

我认为会完全放弃代码并用使用的代码URIFile(URI)构造函数替换它。

于 2011-07-29T06:51:49.757 回答
1
URL url = //...
if(url.getProtocol().equals("file"))) {
    String path = url.getFile().replace('/', File.separatorChar);
    path = ParseUtil.decode(path);
    if (path.endsWith(File.separator)){
       path += "-";
    }
    p = new FilePermission(path, SecurityConstants.FILE_READ_ACTION);
 }

我怀疑这段代码是否在做任何有用的事情。当然,任何执行 replace() 操作的代码都会立即受到怀疑。试试 new File(url.toURI()).getPath() 或 .getAbsolutePath()。

下一个问题是它认为它在做什么来构建权限?那也不会让你到任何地方。安全管理器将在必要时自行执行此操作,并检查生成的权限并在必要时抛出 SecurityException。自己构建 Permission 不会授予您该权限。

于 2011-07-29T08:53:39.053 回答