java.nio.file.Path的字符串

问题描述 投票:0回答:1

可以解释我在这里做错和/或遗漏了什么。我有

java.nio.file.Path
对象在我的 Java 应用程序中运行良好。唯一的问题是当我尝试在日志中打印它们时,该问题仅出现在 Windows 上。当我对
Path
对象(或
File
对象)进行字符串化时,我在 Linux、Unix、Mac 上得到类似
build/somefile.txt
的路径,但在 Windows 上它打印为
buildsomefile.txt
。我期望看到的是
build\\somefile.txt
,但 Windows 上省略了斜杠。

这是我在 Mac、Ubuntu 和 Windows 上使用 Java 11 和 Java 17 执行的简单示例代码:

import java.nio.file.Paths;

System.out.println(Paths.get("build", "somefile.txt"));
System.out.println(Paths.get("build", "somefile.txt").toFile());
System.out.println(Paths.get("build", "somefile.txt").toFile().getPath());

如果我规范化路径,转换为绝对路径等,也会有相同的行为。从Path

的文档来看,在我看来,toString()
应该在这里使用
File.separator
,这是我在上看到的行为非 Windows 系统。该文档还指定 
Windows separatorChar
\\
。谁能帮助我理解我在这里缺少什么?谢谢!

编辑:

这些也都输出空字符串:

import java.nio.file.File; System.out.println(File.separator); System.out.println(File.separatorChar);
值得注意的是,如果相关的话,我在测试中看到了这一点。

java windows path tostring
1个回答
0
投票
java

is 发出 build\someFile.txt

 。具体来说,java 向标准输出发出一个字节序列,然后继续执行。它进入操作系统,操作系统将其发送到连接到 java 进程标准的任何地方,这些标准可能会在某个时刻获取这些字节,将其转换回字符串,然后对其执行某些操作。希望在这场狂野的冒险中,最终有什么东西会把它变成一些角色的小图片,这些最终会被渲染到你的屏幕上,并从那里进入你的眼球。

在这场疯狂的冒险中,有一些东西正在应用反斜杠转义。终端不这样做,所以你在问题中没有提到的其他事情正在这样做。 Java当然不会这样做。还有别的事。如果你只写这个非常基本的:

class Test { public static void main(String[] args) throws Exception { Path x = Path.of("foo/bar.txt"); System.out.println(x); } }
并在库存标准窗口中的库存窗口上运行它 

cmd.exe

 终端,按照您的预期打印 
foo\bar.txt

检查 java 进程和您的眼球之间的应用程序链。他们中的一个人把这件事搞砸了。如果您在这个过程中需要一些帮助,请编辑问题并以令人难以忍受的细节进行解释(因为您可能不知道相关内容,这个 mojibake / 终端的东西可能会很棘手)每个可能存在的应用程序或事物之间。您在 IDE 中运行它吗?哪一个,以及如何。你在 Linux 的 Windows 子系统上运行这个吗?提到这一点,你是如何做的,你正在输入哪些命令,等等。

© www.soinside.com 2019 - 2024. All rights reserved.