В частном случае, если программа на java запускается под Windows, и в програме имеется обращение к файлу по естественному для Windows пути вида \\machine\share\folder\file.ext, то проблем с доступом не будет, так как java отдает доступ к такому файлу на откуп операционной системе, на которой она запущена.
Как пример, можно привести следующий код:
import java.io.File; import java.io.File; public class WindowsClient { public static void main(String[] args) { try { File file = new File(args[0]); if (file.exists()) { System.out.println("File exists"); } else { System.out.println("File doesn't exist"); } } catch (Exception e) { e.printStackTrace(); } } }
Результат запуска под Windows:
c:\>java -jar WindowsClient.jar "\\windows-pc\Public\Documents\JH.Catch22.txt" File exists c:\>
Результат запуска под Linux:
[root@linux-pc tmp]# java -jar WindowsClient.jar "\\windows-pc\Public\Documents\JH.Catch22.txt" File doesn't exist [root@linux-pc tmp]#
Как видим, такой способ не работат на Linux, так как такой доступ не является нативным для него. Унифицированный доступ к Windows Shares можно сделать подключив библиотеки jcifs: http://jcifs.samba.org/.
Для подключения:
1. Берем последнюю версию jcifs-xxx.jar из http://jcifs.samba.org/src/.
2. Добавляем ее в classpath.
3. Меняем программу под работу с URL.
import java.net.URL; public class UniversalClient { public static void main(String[] args) throws Exception { try { jcifs.Config.registerSmbURLHandler(); URL url = new URL(args[0]); if (url.openConnection().getContentLength() > 0) { System.out.println("Content by URL have been detected"); } else { System.out.println("Content by URL have not been detected"); } } catch (Exception e) { e.printStackTrace(); } } }4. При запуске добавляем дополнительный java параметр
-Djava.protocol.handler.pkgs=jcifs
Результаты запуска под Windows:
c:\>java -jar UniversalClient.jar "smb://domain;login:mypassword@windows-pc/Public/Documents/JH.Catch22.txt" Content by URL have been detected
c:\>
Результаты запуска под Linux:
[root@linux-pc tmp]# java -jar UniversalClient.jar "smb://domain;login:mypassword@windows-pc/Public/Documents/JH.Catch22.txt" Content by URL have been detected [root@linux-pc tmp]#
Множество примеров для работы с jcifs можно найти здесь: http://jcifs.samba.org/src/examples/
Комментариев нет:
Отправить комментарий