提问人:alexdlaird 提问时间:9/18/2023 最后编辑:alexdlaird 更新时间:9/18/2023 访问量:71
java.nio.file.Path 的字符串
String of java.nio.file.Path
问:
可以解释我在这里做错了什么和/或遗漏了什么。我的对象在我的 Java 应用程序中运行良好。唯一的问题是当我尝试在日志中打印它们时,该问题仅存在于 Windows 上。当我字符串化一个对象(或对象)时,我会得到一些路径,就像在 Linux、Unix、Mac 上一样,但在 Windows 上它打印为 .我希望看到的是,但在 Windows 上省略了斜杠。java.nio.file.Path
Path
File
build/somefile.txt
buildsomefile.txt
build\\somefile.txt
这是我在 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
的文档来看,在我看来应该在这里使用,这是我在非 Windows 系统上看到的行为。文档还指定 Windows 分隔符为
.谁能帮我理解我在这里错过了什么?谢谢!toString()
File.separator
\\
编辑:
这些也都输出空字符串:
import java.nio.file.File;
System.out.println(File.separator);
System.out.println(File.separatorChar);
值得注意的是,如果这是相关的,我在测试中看到了这一点。
答:
Java 正在发出你所期望的。具体来说,java 会发出一个字节序列来标准输出,然后进行一次旅行。它进入操作系统,操作系统将其发送到与你的 java 进程标准相关的任何内容,该标准可能在某个时候获取这些字节,将其转换回字符串,然后用它做一些事情。希望在这场狂野的冒险中,最终会在某个地方将它变成一些角色的小图片,最终,这些角色会呈现到你的屏幕上,然后从那里进入你的眼球。build\someFile.txt
在那场狂野的冒险中,有些东西正在应用反斜杠转义。终端不这样做,所以你在问题中没有提到的其他东西正在这样做。Java 当然不会这样做。还有别的东西。如果你只是写这个非常基本的:
class Test {
public static void main(String[] args) throws Exception {
Path x = Path.of("foo/bar.txt");
System.out.println(x);
}
}
并在股票标准 Windows 终端中的股票窗口上运行它,该终端按您预期的方式打印。cmd.exe
foo\bar.txt
检查 java 进程和您的眼球之间的应用程序链。他们中的一个正在搞砸这件事。如果您在此过程中需要一些帮助,请编辑问题并详细解释(因为您可能不知道相关内容,这种 mojibake / 终端的东西可能像那样棘手)每个可能介于两者之间的应用程序或事物。您是否在 IDE 中运行它?哪一个,以及如何。您是否在 linux 的 Windows 子系统上运行它?提及这一点,你是如何做到的,你输入了哪些命令,等等。
评论
make tests
/
Path.of("dir/subdir/file.txt")
new File("C:/Program Files/whatever")
评论