Это будет работать над Unix?

Этот код Java перечисляет файлы в каталоге на общем диске Windows. Это будет работать правильно над системой Unix?

File directory = new File("\\\\server/Shared/stuff/mystuff");
for (File file: directory.listFiles()) {
    System.out.println(file);
}
6
задан jjnguy 23 June 2010 в 17:27
поделиться

5 ответов

Краткий ответ: Нет.

Длинный ответ: У вас установлена ​​samba? Даже тогда вам нужно смонтировать общий ресурс. Так что, вероятно, это не сработает.

РЕДАКТИРОВАТЬ

В конечном итоге Java делегирует вызов базовой ОС. Поскольку Unix не знает, что означает путь \\ SERVERNAME , Java также не знает, что он означает. Что вам нужно сделать, чтобы это заработало, это явно смонтировать диск с помощью Samba. Другой вариант, если вы используете Ubuntu, - это поиск в папке .gvfs в вашем домашнем каталоге . Ubuntu создает там монтирование для ваших общих ресурсов Samba, к которым вы должны иметь доступ с помощью Java. Если вы не хотите полагаться на внешние инструменты, попробуйте JCIFS для решения на чистой Java.

8
ответ дан 8 December 2019 в 15:58
поделиться

Нет ... Просто позвольте пользователю выбрать правильный путь и использовать диалоговое окно выбора файла, зависящее от ОС.

3
ответ дан 8 December 2019 в 15:58
поделиться

Встречный вопрос, который я получаю, когда вижу это: "Зачем вам жестко кодировать путь в вашем приложении?"

Даже если это только для примера и вы собираетесь загружать путь из файла свойств или чего-либо еще, я все равно думаю, что вы на неверном пути.

Прежде всего, вам следует избегать абсолютных путей, как чумы. Относительные пути вроде как в порядке. Вы можете использовать символы слеша ('/') в путях в жестком коде, это будет работать как в Windows, так и в Linux/Mac. В общем, на всех платформах.

Во-вторых, зачем вообще использовать пути? Это эпоха интернета. Используйте URL! файл: URL выполняют ту же задачу, что и пути к файлам, но использование URL позволяет вашему приложению принимать ресурсы из других источников, таких как веб-сайты и FTP.

В-третьих, избегайте класса File. Если вы изобретете хороший способ сделать это, вы останетесь в стороне. Используйте URL вместе с getResource и getResourceAsStream, и ваше приложение будет работать независимо от платформы и через сетевые границы в Интернете.

1
ответ дан 8 December 2019 в 15:58
поделиться

В моей системе (Debian Sid с Gnome 2.30 Desktop) мне нужно выбрать «smb: /// server / Shared / ...», чтобы добиться того же поведения. Я думаю, что GVFS (виртуальная файловая система Gnome) с использованием драйверов smbfs обрабатывает реальное соединение в фоновом режиме ...

2
ответ дан 8 December 2019 в 15:58
поделиться

Нет, так как это UNC-путь, который является оконностью.

Вы пытаетесь получить доступ к общему ресурсу Windows из unix? Тогда посмотрите jcifs .

1
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: