eclipse 如何在Java中使用正确的字符编码获得绝对路径?

wribegjk  于 2022-11-04  发布在  Eclipse
关注(0)|答案(4)|浏览(192)

我想得到一个文件的绝对路径,这样我就可以进一步使用它来定位这个文件。我是这样做的:

File file = new File(Swagger2MarkupConverterTest.class.getResource(
            "/json/swagger.json").getFile());   
String tempPath = file.getAbsolutePath();
String path = tempPath.replace("\\", "\\\\");

路径irl如下所示:

C:\\Users\\Michał Szydłowski\\workspace2\\swagger2markup\\bin\\json\\swagger.json

但是,由于它包含波兰语字符和空格,因此我从getAbsolutPath得到的结果是:

C:\\Users\\Micha%c5%82%20Szyd%c5%82owski\\workspace2\\swagger2markup\\bin\\json\\swagger.json

我怎样才能让它以正确的方式来做呢?这是有问题的,因为使用这个路径,它无法找到文件(说它不存在)。

iugsix8n

iugsix8n1#

您正在使用的URL.getFile调用返回根据URL编码规则编码的URL的文件部分。在将字符串提供给File之前,您需要使用URLDecoder对该字符串进行解码:

String path = Swagger2MarkupConverterTest.class.getResource(
        "/json/swagger.json").getFile();

path = URLDecoder.decode(path, "UTF-8");

File file = new File(path);

从Java 7开始,您可以使用StandardCharsets.UTF_8

path = URLDecoder.decode(path, StandardCharsets.UTF_8);
kulphzqa

kulphzqa2#

最简单的方法,不涉及解码任何东西,是这样的:

URL resource = YourClass.class.getResource("abc");
Paths.get(resource.toURI()).toFile();
// or, equivalently:
new File(resource.toURI());

现在,文件在类路径中的物理位置并不重要,只要资源实际上是一个文件而不是JAR条目,就可以找到它。

xdyibdwo

xdyibdwo3#

URI uri = new File(Swagger2MarkupConverterTest.class.getResource(
            "/json/swagger.json").getFile()).toURI(); 
File f = new File(uri);
System.out.println(f.exists());

可以使用URI对路径进行编码,并通过URI打开File

7eumitmz

7eumitmz4#

您可以简单地使用

File file = new File("file_path");
String charset = "UTF-8";
BufferedReader reader = new BufferedReader(new InputStreamReader(
                    new FileInputStream(file), charset));

在读取文件时给予字符集。

相关问题