EDIT: Я перефразирую свой оригинальный вопрос (я держу его внизу)
Взгляните на этот код:
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
Затем я открываю FileSystem
из файла jar, который содержит одну и ту же папку и выполняет то же самое, что и раньше. Это соответствующий результат:
webapp/
Есть ли причина для получения конечного "/" в имени папки 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
Затем я открываю FileSystem
из файла jar, который содержит одну и ту же папку и выполняет то же самое, что и раньше. Это соответствующий результат:
/webapp/afile.txt
/webapp/afolder/
Теперь, это действительно сводит меня с ума... почему на выходе будет отличаться?
Я могу понять префикс '/' в выводе jar, так как файлы находятся в корне относительно файловой системы jar (хотя я не думаю, что я все еще принимаю его), но суффикс '/' после того, как каталог возмутительно !
Это отстой, что я должен написать другой код для обработки двух случаев... Конечно, здесь я преувеличиваю проблему, и я знаю, что это легко исправлено... но все же... почему?
Спасибо, ребята!
Резюме всех комментариев:
т.е. вы должны иметь возможность писать код для обработки обоих случаев. Это то, что для nio.
Ответ на измененный вопрос:
Имя файла пути p: p.getFileName().
Строковое представление имени файла p: p.getFileName(). ToString().
Эта строка не имеет косой черты. например, fs.getPath("abc", "def").getFileName(). toString() → "def"
Path
кроме выводаtoString
?