我有一种情况,我收到一个格式为
的文件URIfile:///home/user/a.txt
我知道根据操作系统的不同,还可以使用其他格式:
file:/C:/a.txt <- On Windows
file:///C:/a.txt <- On Windows
file:///home/user/a.txt <- On Linux
我需要存储文件的绝对文件路径。所以我想转换为:
file:///home/user/a.txt ===> /home/user/a.txt
我现在用一种非常笨拙的方式来做:
public void save(URI targetURI) {
Path path = Paths.get("/", targetURI.toString()).normalize();
String filePath=""+path;
filePath=filePath.replace("/file:", "");
....
}
我希望有一个基于java的更优雅的解决方案。我要上课吗?
check this ->将URL转换为绝对路径
Path p = Paths.get(url.toURI());
和如何说@GOTO 0
使用Java 11或更高版本的用户的另一个选择:
Path = Path.of(url.toURI());或者作为字符串:
String path = path .of(url.toURI()).toString();以上两种方法抛出一个URISyntaxException,如果URL是,可以安全地忽略它保证是一个文件URL
我发现了这个->https://eed3si9n.com/encoding-file-path-as-URI-reference/这个问题的解决方案在这里有详细的描述
public static void main(String[] args) throws URISyntaxException
{
URI uri = new URI("file:/C:/a.txt");
save(uri);
uri = new URI("file:///C:/a.txt");
save(uri);
uri = new URI("file:///home/user/a.txt");
save(uri);
}
public static void save(URI targetURI)
{
Path p = Paths.get(targetURI);
String absolutePath = p.toString();
System.out.println(absolutePath);
}
很简单
public void save(URI targetURI) {
Path p=Paths.get(targetURI).toString());
String absolutePath= p.toString();
...
}