Этот код Java перечисляет файлы в каталоге на общем диске Windows. Это будет работать правильно над системой Unix?
File directory = new File("\\\\server/Shared/stuff/mystuff");
for (File file: directory.listFiles()) {
System.out.println(file);
}
Краткий ответ: Нет.
Длинный ответ: У вас установлена samba? Даже тогда вам нужно смонтировать общий ресурс. Так что, вероятно, это не сработает.
РЕДАКТИРОВАТЬ
В конечном итоге Java делегирует вызов базовой ОС. Поскольку Unix не знает, что означает путь \\ SERVERNAME
, Java также не знает, что он означает. Что вам нужно сделать, чтобы это заработало, это явно смонтировать диск с помощью Samba. Другой вариант, если вы используете Ubuntu, - это поиск в папке .gvfs
в вашем домашнем каталоге
. Ubuntu создает там монтирование для ваших общих ресурсов Samba, к которым вы должны иметь доступ с помощью Java. Если вы не хотите полагаться на внешние инструменты, попробуйте JCIFS для решения на чистой Java.
Нет ... Просто позвольте пользователю выбрать правильный путь и использовать диалоговое окно выбора файла, зависящее от ОС.
Встречный вопрос, который я получаю, когда вижу это: "Зачем вам жестко кодировать путь в вашем приложении?"
Даже если это только для примера и вы собираетесь загружать путь из файла свойств или чего-либо еще, я все равно думаю, что вы на неверном пути.
Прежде всего, вам следует избегать абсолютных путей, как чумы. Относительные пути вроде как в порядке. Вы можете использовать символы слеша ('/') в путях в жестком коде, это будет работать как в Windows, так и в Linux/Mac. В общем, на всех платформах.
Во-вторых, зачем вообще использовать пути? Это эпоха интернета. Используйте URL! файл: URL выполняют ту же задачу, что и пути к файлам, но использование URL позволяет вашему приложению принимать ресурсы из других источников, таких как веб-сайты и FTP.
В-третьих, избегайте класса File. Если вы изобретете хороший способ сделать это, вы останетесь в стороне. Используйте URL вместе с getResource и getResourceAsStream, и ваше приложение будет работать независимо от платформы и через сетевые границы в Интернете.
В моей системе (Debian Sid с Gnome 2.30 Desktop) мне нужно выбрать «smb: /// server / Shared / ...», чтобы добиться того же поведения. Я думаю, что GVFS (виртуальная файловая система Gnome) с использованием драйверов smbfs обрабатывает реальное соединение в фоновом режиме ...
Нет, так как это UNC-путь, который является оконностью.
Вы пытаетесь получить доступ к общему ресурсу Windows из unix? Тогда посмотрите jcifs .