编辑:我正在重述我原来的问题(我把它放在底部)
看看这段代码:
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/
现在,这真的让我发疯了......为什么输出会有所不同?
我能理解&#39; /&#39;在jar的输出中有前缀,因为文件在根目录中相对于jar文件系统(即使我不认为我仍然接受它),但是&#39; /&#39;目录之后的后缀是令人发指的!
我很难写出不同的代码来处理这两种情况......当然,我在这里夸大了这个问题,我知道它很容易修复......但仍然......为什么??
谢谢大家!
答案 0 :(得分:0)
所有评论的摘要:
即。你应该能够编写代码来处理这两种情况。这是nio的用途。
回答修改后的问题:
路径的文件名p:p.getFileName()。
p:p.getFileName()。toString()的文件名的字符串表示形式。
此字符串没有斜杠。 例如 fs.getPath(&#34; abc&#34;,&#34; def&#34;)。getFileName()。toString() - &gt; &#34; DEF&#34;