有没有一种方法可以将其转换为:
/C:/Users/David/Dropbox/My%20Programs/Java/Test/bin/myJar.jar
进入这个?
C:\Users\David\Dropbox\My Programs\Java\Test\bin\myJar.jar
我正在使用以下代码,这些代码将返回.JAR存档或/ bin目录的完整路径。
fullPath = new String(MainInterface.class.getProtectionDomain()
.getCodeSource().getLocation().getPath());
问题是,getLocation()
返回a URL
,我需要一个正常的Windows文件名。我试过添加以下内容getLocation()
:
toString()
而toExternalForm()
这两个回报:
file:/C:/Users/David/Dropbox/My%20Programs/Java/Test/bin/
getPath()
返回:
/C:/Users/David/Dropbox/My%20Programs/Java/Test/bin/
请注意%20
应将转换为空格。
有没有快速简便的方法来做到这一点?
当前的建议(使用JDK
1.7+)是转换URL→URI→路径。因此,要将URL转换为File,您应该说Paths.get(url.toURI()).toFile()
。如果您还不能使用JDK
1.7,我建议您使用new File(URI.getSchemeSpecificPart())
。
转换文件→URI:首先,我将向您展示一些可能在Java中获得的URI的示例。
-classpath URLClassLoader File.toURI() Path.toUri()
C:\Program Files file:/C:/Program%20Files/ file:/C:/Program%20Files/ file:///C:/Program%20Files/
C:\main.c++ file:/C:/main.c++ file:/C:/main.c++ file:///C:/main.c++
\\VBOXSVR\Downloads file://VBOXSVR/Downloads/ file:////VBOXSVR/Downloads/ file://VBOXSVR/Downloads/
C:\Résume.txt file:/C:/R%c3%a9sume.txt file:/C:/Résume.txt file:///C:/Résume.txt
\\?\C:\Windows (non-path) file://%3f/C:/Windows/ file:////%3F/C:/Windows/ InvalidPathException
关于这些URI的一些观察:
转换URI→文件:让我们尝试将前面的示例转换为文件:
new File(URI) Paths.get(URI) new File(URI.getSchemeSpecificPart())
file:///C:/Program%20Files C:\Program Files C:\Program Files C:\Program Files
file:/C:/Program%20Files C:\Program Files C:\Program Files C:\Program Files
file:///C:/main.c++ C:\main.c++ C:\main.c++ C:\main.c++
file://VBOXSVR/Downloads/ IllegalArgumentException \\VBOXSVR\Downloads\ \\VBOXSVR\Downloads
file:////VBOXSVR/Downloads/ \\VBOXSVR\Downloads \\VBOXSVR\Downloads\ \\VBOXSVR\Downloads
file://///VBOXSVR/Downloads \\VBOXSVR\Downloads \\VBOXSVR\Downloads\ \\VBOXSVR\Downloads
file://%3f/C:/Windows/ IllegalArgumentException IllegalArgumentException \\?\C:\Windows
file:////%3F/C:/Windows/ \\?\C:\Windows InvalidPathException \\?\C:\Windows
同样,使用Paths.get(URI)
优先于new File(URI)
,因为Path能够处理UNC
URI并拒绝带有\?\前缀的无效路径。但是,如果您不能使用Java 1.7,请new File(URI.getSchemeSpecificPart())
改为说。
顺便说一句,千万 不能 用URLDecoder
解码文件URL。对于包含“ +”的文件,例如“ file:/// C:/main.c++”,
URLDecoder
请将其转换为“ C:\
main.c”!URLDecoder
仅用于解析URI的查询(param=value¶m=value
)中的application /
x-www-form-urlencoded HTML表单提交,而不用于取消引用URI的路径。
2014-09:编辑添加示例。
问题内容: 我的页面会生成这样的URL:如何将其转换为普通地址? 我将其用作的属性。 问题答案: 从JavaScript创建的URL 不能转换为“普通” URL。 一个URL并不是指在服务器上存在的数据,它是指数据您的浏览器目前在存储器中,当前页面。它在其他页面上将不可用,在其他浏览器中将不可用,并且在其他计算机上将不可用。 因此,通常来说,将URL 转换为“正常” URL 是没有意义的。如果要使
问题内容: 在WeasyPrint的公共API中,我接受HTML输入的文件名(除其他类型外)。任何与内置文件一起使用的文件名都可以使用,但是我需要将其转换为方案中的URL,然后再将其传递给。 (所有内容在内部都是URL形式。我需要为文档提供一个“基本URL”,以便使用来解析相对URL引用。) urllib.pathname2url是一个开始: 将路径名路径从路径的本地语法转换为URL的路径组件中使
问题内容: 在Java中,是否存在在URL和Windows文件名之间转换的标准/良好方法? 我正在尝试下载文件,但是我希望Windows文件名可以转换回原始文件名。请注意,URL的查询部分至关重要,因为我将下载仅在查询方面有所不同的不同页面。 我当前的hacky解决方案是用特定的字符串(例如“ QQ”)替换非法字符(例如“?”),但这会使转换回url的透明度降低。有没有更好的办法? 问题答案: 您
问题内容: 有没有一种方法可以将JSON数组转换为用于Java ListView数据绑定的普通Java数组? 问题答案:
问题内容: 我有一个猫鼬的文档,我想在JSON编码之前进行扩展并作为响应发送出去。如果我尝试向文档添加属性,则将其忽略。该属性不会出现无法进行正常扩展的情况。奇怪的是,它可以正常工作并返回具有所有正确属性的对象。有一个更好的方法吗? 问题答案: 猫鼬继承自s,后者有一个方法。我相信您要寻找的应该是的结果。 http://mongoosejs.com/docs/api.html#document_D
我需要将这个sql查询转换为hibernate条件,请大家帮忙。 按名称顺序按应用描述限制3从设备组中选择名称,计数(*)为应用