gpt4 book ai didi

java - Java 中的资源、URI、URL、路径和文件有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 11:38:39 32 4
gpt4 key购买 nike

我现在正在查看一段 Java 代码,它将路径作为字符串并使用 URL resource = ClassLoader.getSystemClassLoader().getResource(pathAsString); 获取其 URL。 ,然后调用 String path = resource.getPath()最后执行 new File(path); .

哦,还有拨打URL url = resource.toURI();的电话。和 String file = resource.getFile() .

我现在完全糊涂了——我猜主要是因为术语。有人可以带我了解这些差异,或提供一些防伪 Material 的链接吗?特别是 URI 到 URL 和资源到文件?对我来说,感觉它们应该是一样的东西,分别......

的区别getFile() getPath() 解释如下:What's the difference between url.getFile() and getpath()? (有趣的是,他们似乎都返回了字符串,这可能让我的心情大为改观……)

现在,如果我有一个引用 jar 文件中的类或包的定位器,这两个(即文件字符串的路径)会不同吗?
resource.toString()会给你jar:file:/C:/path/to/my.jar!/com/example/ ,毕竟(注意感叹号)。

之间的区别是什么URI 网址 在 Java 中,前者不编码空格?参见Files, URIs, and URLs conflicting in Java (这个答案很好地解释了这两个术语之间的一般概念差异:URIs identify and URLs locate;)

最后 - 也是最重要的 - 为什么我需要 File对象;为什么资源( URL )不够用? (是否有 Resource 对象?)

对不起,如果这个问题有点无组织;它只是反射(reflect)了我的困惑... :)

最佳答案

更新 2017-04-12 查询 JvR's answer因为它包含更详尽和准确的解释!

请注意,我不认为自己 100% 有能力回答,但这里有一些评论:

  • File表示可通过文件系统访问的文件或目录
  • 资源是 generic term对于可以由应用程序加载的数据对象
  • 通常资源是与应用程序/库一起分发并通过类加载机制加载的文件(当它们驻留在类路径上时)
  • URL#getPath是 URL 路径部分的 getter ( protocol://host/path?query )
  • URL#getFile根据 JavaDoc 返回 path+query

  • 在 Java 中, URI只是用于操作通用标识符本身的数据结构。
    URL另一方面,它确实是一个资源定位器,并为您提供通过注册 URLStreamHandler 实际读取资源的功能。 s。

    URL 可以指向文件系统资源,您可以使用 file:// 为每个文件系统资源构建 URL。协议(protocol)(因此 File <-> URL 关系)。

    另请注意, URL#getFilejava.io.File 无关.

    Why do I need File object; why isn't a Resource (URL) enough?



    就够了。只有当你想把资源传递给一些只能处理文件的组件时,你才需要得到 File从中。但是,并非所有资源 URL 都可以转换为 File s。

    And is there a Resource object?



    从 JRE 的角度来看,它只是一个术语。一些框架为您提供了这样的类(例如 Spring's Resource )。

    关于java - Java 中的资源、URI、URL、路径和文件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27845223/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com