有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java文件。toURI不编码加号

我只是想用这个问题来检查我自己的理智。我有一个文件名,其中有一个+(plus)字符,这在某些操作系统和文件系统(例如MacOS和HFS+)上完全有效

然而,我发现一个问题,我认为java.io.File#toURI()运行不正常

例如:

new File("hello+world.txt").toURI().toString()

在我的Mac电脑上返回:

file:/Users/aretter/code/rocksdb/hello+world.txt

然而,这是不正确的,因为文件名中的+(plus)字符尚未在URI中编码。URI根本不代表原始文件名,URI中的+与文件名中的+字符的含义截然不同

因此,如果我们解码URI,加号现在将被替换为(空格)字符,我们已经丢失了信息。e、 g:

URLDecoder.decode(new File("hello+world.txt").toURI().toURL().toString)

其结果是:

file:/Users/aretter/code/rocksdb/hello world.txt

相反,我所期望的是:

new File("hello+world.txt").toURI().toString()

导致:

file:/Users/aretter/code/rocksdb/hello%2Bworld.txt

因此,当它以后被使用和解码时,加号被保留下来

我很难相信JavaSE中会出现如此明显的错误。有人能指出我错在哪里吗

另外,如果有解决办法,我想听听?请记住,我实际上并没有提供静态字符串作为文件名,而是从磁盘读取文件目录,其中一些文件可能包含+(加号)字符


共 (0) 个答案