什么';Java中的资源、URI、URL、路径和文件之间有什么区别?
我现在正在看一段Java代码,它将路径作为字符串,并使用什么';Java中的资源、URI、URL、路径和文件之间有什么区别?,java,url,terminology,Java,Url,Terminology,我现在正在看一段Java代码,它将路径作为字符串,并使用URL resource=ClassLoader.getSystemClassLoader().getResource(pathAsString)获取其URL,然后调用String path=resource.getPath(),最后执行新文件(path) 哦,还有对URL=resource.toURI()的调用和String file=resource.getFile() 我现在完全糊涂了——我想主要是因为术语。有人可以带我了解这些差异,
URL resource=ClassLoader.getSystemClassLoader().getResource(pathAsString)获取其URL
,然后调用String path=resource.getPath()
,最后执行新文件(path)代码>
哦,还有对URL=resource.toURI()的调用
和String file=resource.getFile()
我现在完全糊涂了——我想主要是因为术语。有人可以带我了解这些差异,或者提供一些虚拟证据材料的链接吗?特别是URL的URI和文件的资源?对我来说,感觉他们应该是一样的东西,分别
这里解释了getFile()
和getPath()
之间的区别:(有趣的是,它们似乎都返回字符串,这可能会大大增加我的思维状态……)
现在,如果我有一个引用jar文件中的类或包的定位器,这两个(即文件字符串的路径)会有所不同吗
resource.toString()
将为您提供jar:file:/C:/path/to/my.jar/com/example/
,毕竟(注意感叹号)
Java中URI和URL之间的区别是前者不编码空格吗?Cf.(这个答案很好地解释了这两个术语在概念上的一般差异:)
最后——也是最重要的——为什么我需要文件
对象;为什么资源(URL
)不够?(有资源对象吗?)
对不起,如果这个问题有点杂乱无章;这只是反映了我的困惑…:) 更新2017-04-12检查,因为它包含更详尽和准确的解释
请注意,我不认为自己有能力回答100%个问题,但是这里有一些评论:
文件
表示可通过文件系统访问的文件或目录
- 资源是可由应用程序加载的数据对象的
- 通常资源是随应用程序/库一起分发的文件,并通过类加载机制加载(当它们位于类路径上时)
URL#getPath
是URL的路径部分的getter(protocol://host/path?query
)
URL#getFile
根据JavaDoc返回path+query
在Java中,URI
只是一个用于操作通用标识符本身的数据结构
另一方面,URL
实际上是一个资源定位器,为您提供了通过注册的URLStreamHandler
s实际读取资源的功能
URL可以指向文件系统资源,您可以使用file://
协议为每个文件系统资源构造URL(因此file
URL
关系)
还要注意,URL#getFile
与java.io.File
无关
为什么我需要文件对象;为什么资源(URL)不够
够了。只有当您想将资源传递给某个只能使用文件的组件时,才需要从中获取File
。但是,并非所有资源URL都可以转换为文件
s
还有资源对象吗
从JRE的角度来看,这只是一个术语。一些框架为您提供了这样的类(例如)。据我所知,您可以将它们分类如下:
基于Web的:URI和URL
- URL:URL是Internet上的一个确定位置(只是一个普通的网址,如-stackoverflow.com)
- URI:URL是一个URI。但URI也可以包含“mailto:”之类的内容,所以它们也可以说是某种“脚本”
和本地:资源、路径和文件
- 资源:资源是jar中的文件。它们用于从jar/容器中加载文件
- 路径:路径基本上是一个字符串。但是它附带了一些方便的函数来连接多个字符串,或者将文件添加到一个字符串中。它确保您正在构建的路径有效
- 文件:这是对目录或文件的引用。它用于修改文件、打开文件等
如果将它们合并到一个类中会更容易——它们确实令人困惑:D
我希望这对你有帮助:)
(我刚刚看了一下文档-看看docs.oracle.com)文件是本地文件系统中实体的抽象表示
路径通常是一个字符串,指示文件在文件系统中的位置。它通常不包括文件名。因此c:\documents\mystuff\stuff.txt将有一个值为“c:\documents\mystuff”的路径。显然,不同文件系统的绝对文件名和路径的格式会有很大的差异
URL是URI的susbset,URL通常表示通过http访问的资源。我不认为有任何关于什么时候必须是URI和URL的铁一般的规则。URI是字符串,格式为“protocol://resource-identifier“比如bitcoin://params, . 像URL这样的类通常包装字符串,并提供字符串没有理由提供的实用程序方法
没有所谓的资源,至少在你所说的意义上没有。方法名为getResource并不意味着它返回Resource类型的对象
最终,了解类的方法的最佳方法是在代码中创建它的实例,调用这些方法,然后在调试模式下逐步执行,或者将结果发送到System.out 很好
正如他所说,“文件”一词在URL#getFile
vsjava.io.file