gpt4 book ai didi

java - jar 文件系统中的目录名称与常规文件系统不同

转载 作者:太空宇宙 更新时间:2023-11-04 14:39:38 25 4
gpt4 key购买 nike

编辑:我正在重新表述我原来的问题(我将其保留在底部)

看一下这段代码:

public static void main(String[] args) {
try {

// file in file system

Path dir = Paths.get("webapp/");
System.out.println(dir.getFileName().toString());

// file in jar

FileSystem fs = FileSystems.newFileSystem(Paths.get("ajar.jar"), null);
Path jarDir = fs.getPath("webapp/");
System.out.println(jarDir.getFileName().toString());

} catch (IOException e) {
e.printStackTrace();
}
}

首先,我从文件系统中的目录获取一个Path,并打印它的名称。输出为:

webapp

然后我从包含相同文件夹的 jar 文件中打开一个 FileSystem 并执行与之前相同的操作。这是相应的输出:

webapp/

是否有理由在 jar 文件夹的名称中添加尾随“/”?

如何仅获取不带斜线的文件夹名称,而不必区分两种情况(jar 和无 jar)?

谢谢!

--- 原始问题 ---

我正在尝试使用 Java SE 7 的 nio 库。

看一下这段代码:

public static void main(String[] args) {
try {

// List files in file system

Path dir = Paths.get("webapp/");

try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path file : stream) {
System.out.println(file.toString());
}
}

// List files in jar

FileSystem fs = FileSystems.newFileSystem(Paths.get("ajar.jar"), null);
Path jarDir = fs.getPath("webapp/");

try (DirectoryStream<Path> stream = Files.newDirectoryStream(jarDir)) {
for (Path file : stream) {
System.out.println(file.toString());
}
}

} catch (IOException e) {
e.printStackTrace();
}
}

基本上,首先我从文件系统中的文件夹创建一个 DirectoryStream 并迭代内容,输出如下所示:

webapp/afile.txt
webapp/afolder

然后我从包含相同文件夹的 jar 文件中打开一个 FileSystem 并执行与之前相同的操作。这是相应的输出:

/webapp/afile.txt
/webapp/afolder/

现在,这真的让我发疯......到底为什么输出会不同?

我可以理解 jar 输出中的“/”前缀,因为这些文件相对于 jar 文件系统位于根目录中(尽管我认为我仍然不接受它),但是 a 之后的“/”后缀目录太离谱了!

这很糟糕,我必须编写不同的代码来处理这两种情况...当然,在这里我夸大了这个问题,而且我知道它很容易修复...但仍然...为什么?

谢谢大家!

最佳答案

所有评论摘要:

  • 不要依赖路径的字符串版本。直接使用路径。
  • 要区分目录形式文件,请在路径上使用 Files.isDirectory
  • 亲戚有亲戚 child

即您应该能够编写代码来处理这两种情况。这就是 nio 的用途。

回答修改后的问题:

路径p的文件名:p.getFileName()。

p 文件名的字符串表示形式:p.getFileName().toString()。

该字符串没有斜杠。例如fs.getPath( "abc", "def").getFileName().toString() -> "def"

关于java - jar 文件系统中的目录名称与常规文件系统不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com