Будет ли это работать на Unix? - PullRequest
6 голосов
/ 23 июня 2010

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

File directory = new File("\\\\server/Shared/stuff/mystuff");
for (File file: directory.listFiles()) {
    System.out.println(file);
}

Ответы [ 5 ]

8 голосов
/ 23 июня 2010

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

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

EDIT

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

3 голосов
/ 23 июня 2010

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

2 голосов
/ 23 июня 2010

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

1 голос
/ 23 июня 2010

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

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

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

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

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

1 голос
/ 23 июня 2010

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

Вы пытаетесь получить доступ к общей папке Windows из Unix?Тогда взгляните на jcifs .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...