如何将Java文件URI转换为绝对路径?



我有一种情况,我收到一个格式为

的文件URI
file:///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();
...
}

最新更新