Как подключиться к удаленной папке через java
Перейти к содержимому

Как подключиться к удаленной папке через java

  • автор:

Удаленный диск с использованием клиента Java

В этом разделе описано подключение локального носителя с использованием клиента Java.

Можно использовать клиент Java для назначения серверу CD- или DVD-диска, дисковода для дискет и USB-устройства флэш-памяти, находящегося на вашем компьютере, либо указать образ диска на своем компьютере для использования сервером. Диск можно использовать для перезагрузки (загрузки) сервера, обновления кода, установки на сервер нового ПО, а также установки или обновления операционной системы сервера. Можно осуществлять доступ к удаленному диску. Диски и образы дисков отображаются в качестве USB-накопителей на сервере.

  1. Среда выполнения Oracle Java Runtime Environment 1.8/Java SE 8 или более новые версии
  2. Поддерживается дистрибутив AdoptOpenJDK OpenJDK 8. с HotSpot JVM.

в OSX, Windows и Linux.

Создание файла образа​

  1. Нажмите Создать образ на вкладке Виртуальные носители в окне «Клиент Java виртуальных носителей». Отобразится окно «Создание образа из папки».
  2. Нажмите кнопку Обзор, связанную с полем Исходная папка, чтобы выбрать нужную исходную папку.
  3. Нажмите кнопку Обзор, связанную с полем Новый файл образа, чтобы выбрать нужный файл образа.
  4. Нажмите кнопку Создать образ.

Creating an image file

Рис. 1. Создание файла образа

Выбор подключаемых устройств​

Чтобы подключить локальный образ, папку и CD-/DVD-/USB-диск, выполните следующие действия:

Нажмите Выбрать подключаемые устройства на вкладке Виртуальные носители в окне «Клиент Java виртуальных носителей». Отобразится окно «Выбор подключаемых устройств».

Select Devices to Mount Window

Рис. 2. Окно «Выбор подключаемых устройств»

  1. Нажмите кнопку Добавить образ, чтобы выбрать подключаемый образ.
  2. Установите флажок Сопоставлено.
  3. При необходимости установите флажок Только чтение, чтобы включить соответствующую функцию.
  4. Нажмите кнопкуПодключить выбранное, и локальный образ будет успешно подключен.

Mount Local Image

Рис. 3. Подключение локального образа

  1. Нажмите кнопку Сопоставить папку, чтобы выбрать локальную папку для подключения.
  2. Нажмите кнопкуПодключить выбранное, и локальная папка будет успешно подключена.

Mount Local Folder

Рис. 4. Подключение локальной папки

Mount CD/DVD or USB Drive

Рис. 5. Подключение CD-/DVD-/USB-диска

  • Поле Сопоставлено содержит флажок, с помощью которого можно выбрать устройства для подключения или сопоставления.
  • Поле Только чтение содержит флажок, с помощью которого можно выбрать сопоставленные или подключенные устройства, которые на хост-сервере будут доступны только для чтения.
  • В поле Диск отображается путь к устройству на локальном компьютере.
  • Нажмите кнопку Закрыть, чтобы закрыть окно «Выбор подключаемых устройств».
  • Нажмите кнопку Добавить образ, чтобы найти файл образа на дискете или файл образа ISO в локальной файловой системе, который требуется добавить в список устройств.
  • Нажмите кнопку Удалить образ, чтобы удалить образ, добавленный в список устройств.
  • Нажмите кнопку Подключить выбранное, чтобы подключить или сопоставить все устройства, помеченные для подключения или сопоставления в поле Сопоставленные.

Папка будет подключена в качестве доступной только для чтения.

Выбор отключаемых устройств​

    Нажмите Отключить все на вкладке Виртуальные носители в окне «Клиент Java виртуальных носителей».

После выбора варианта Отключить все отобразится окно подтверждения действия. После подтверждения все устройства хост-сервера будут отключены от сервера.

Невозможно отключать диски по одному.

Unmount All

Рис. 6. Отключить все

Как подключиться к удаленной папке через java

Есть задача — в процессе, работающем под сервером приложений (WebLogic) необходимо прочитать и изменить (записать) содержимое текстового файла, который находится в расшареной папке на удаленной Windows-машине..
Имеются логин/пароль и путь к файлу на той виндовс-машине..

Как работать с файлами (писать/читать) нашел здесь много тем, но вот чтобы подключиться к файлу с использованием логина-пароля — не удалось найти

а в моем случае такое:

File f = new File("\\\\10.1.1.1\\folder\\file.txt");

— не подходит.. с эксепшином не валится, но и свойства у f получаются при создании следующие: isAbsolute:true, isDirectory:false, isFile:false, isHidden:false, exists:false, т.е. работать с таким f не получится

Как в java-коде правильно использовать логин/пароль и путь для открытия такого файла?

Зараннее спасибо,
Владимир.

Re: работа с файлом на удаленной машине

От: Blazkowicz
Дата: 20.04.10 12:41
Оценка:

Здравствуйте, __Vovan_H__, Вы писали:

__V>а в моем случае такое:
__V>

__V>File f = new File("\\\\10.1.1.1\\folder\\file.txt"); __V>

__V>- не подходит..
Ух ты. А в каком-то другом случае подходит?

Стоит немного пораскинуть мозгами и прийти к выводу, что java.io.File это API для работы с файловой системой ОС.
А файлы на удаленной машине файловой системой текущей ОС не являются.
И выхода здесь два.
Либо NET USE/NET STOP.
Либо http://www.google.com/search?q=Java+samba -> http://jcifs.samba.org/

Re[2]: работа с файлом на удаленной машине

От: __Vovan_H__
Дата: 20.04.10 12:57
Оценка: 21 (1)

Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, __Vovan_H__, Вы писали:

__V>>а в моем случае такое:
__V>>

__V>>File f = new File("\\\\10.1.1.1\\folder\\file.txt"); __V>>

__V>>- не подходит..
B>Ух ты. А в каком-то другом случае подходит?

B>Стоит немного пораскинуть мозгами и прийти к выводу, что java.io.File это API для работы с файловой системой ОС.
B>А файлы на удаленной машине файловой системой текущей ОС не являются.
B>И выхода здесь два.
B>Либо NET USE/NET STOP.
B>Либо http://www.google.com/search?q=Java+samba -> http://jcifs.samba.org/

В случае, когда логин-пароль не нужен — работает
..ну правда само приложение при этом на виндузной машине и удаленная машина с файлом — тоже виндузная.
при таком раскладе у меня удаленный файл совершенно нормально открылся и содержимое его я прочитал (распечатал на консоль сервера приложений).
Из ваших предложений мне больше, по ходу, подойдет второе.. потому как на серваке монтировать никто ничего не будет.
Спасибо за совет!

Re[3]: работа с файлом на удаленной машине

От: Blazkowicz
Дата: 20.04.10 13:12
Оценка:

Здравствуйте, __Vovan_H__, Вы писали:

__V>Из ваших предложений мне больше, по ходу, подойдет второе.. потому как на серваке монтировать никто ничего не будет.
Я вообще-то имел ввиду Runtime.exec()/ProcessBuilder

Re[4]: работа с файлом на удаленной машине

От: __Vovan_H__
Дата: 20.04.10 13:19
Оценка:

Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, __Vovan_H__, Вы писали:

__V>>Из ваших предложений мне больше, по ходу, подойдет второе.. потому как на серваке монтировать никто ничего не будет.
B>Я вообще-то имел ввиду Runtime.exec()/ProcessBuilder

..хм.. а я подумал подмонтировать сетевой диск на машине, локальной для процесса, на сетевой ресурс, где файл лежит
..видимо надо будет ознакомиться и с темой «Runtime.exec()/ProcessBuilder». я просто с java ваще пока ещё совсем «на вы», поэтому иногда фик знает как тут у вас чего устроено
пасип ещё раз за инфу

Re[3]: работа с файлом на удаленной машине

От: Blazkowicz
Дата: 20.04.10 13:20
Оценка:

Здравствуйте, __Vovan_H__, Вы писали:

__V>В случае, когда логин-пароль не нужен — работает
Фига се позор на мои седины. Даже в JavaDoc про это написано!

Re[4]: работа с файлом на удаленной машине

От: __Vovan_H__
Дата: 20.04.10 13:22
Оценка:

Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, __Vovan_H__, Вы писали:

__V>>В случае, когда логин-пароль не нужен — работает
B>Фига се позор на мои седины. Даже в JavaDoc про это написано!

ну всяко бывает..
лан, я домой пошел.
завтра буду всё пробовать
До свидания!

Re: работа с файлом на удаленной машине

От: Аноним
Дата: 21.04.10 07:53
Оценка:

Здравствуйте, __Vovan_H__, Вы писали:

__V>Есть задача — в процессе, работающем под сервером приложений (WebLogic) необходимо прочитать и изменить (записать) содержимое текстового файла, который находится в расшареной папке на удаленной Windows-машине..
__V>Имеются логин/пароль и путь к файлу на той виндовс-машине..

__V>Как работать с файлами (писать/читать) нашел здесь много тем, но вот чтобы подключиться к файлу с использованием логина-пароля — не удалось найти

__V>а в моем случае такое:

__V>

__V>File f = new File("\\\\10.1.1.1\\folder\\file.txt"); __V>

__V>- не подходит.. с эксепшином не валится, но и свойства у f получаются при создании следующие: isAbsolute:true, isDirectory:false, isFile:false, isHidden:false, exists:false, т.е. работать с таким f не получится

__V>Как в java-коде правильно использовать логин/пароль и путь для открытия такого файла?

__V>Зараннее спасибо,
__V>Владимир.

а что, права пользователя, под которым запущена ява, уже никак не решают?

всё ява нормально читает со всех сетевых дисков, если у пользователя, под которым она запущена, права есть.

это, кстати, выливается в гон «на яву» при запуске ее как сервиса под аккаунтом по умолчанию — мол, сетевых шар не видит. А не видит из-за того, что виндовый дефолтюзер сам не имеет на это прав.

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

так работает и с виндой, и с расшареными (уж не знаю как) linux-каталогами, и с HSM, и со всякими ленточными шкафами.

Открытие сетевой папки

Exception in thread «AWT-EventQueue-0» java.lang.IllegalArgumentException: The file: \\testServer doesn’t exist.
at java.awt.Desktop.checkFileValidation(Desktop.java:210)
at java.awt.Desktop.open(Desktop.java:270)
at folders.Main$ItemMenuListener.actionPerformed(Main.java:86)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.jav a:877)
at java.awt.Component.processMouseEvent(Component.java:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7 5)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:8 6)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:7 5)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201 )
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105 )
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Копирование сетевой папки
всем привет: батник: @echo off& chcp 1251 xcopy "\\192.168.1.6\1с\база Дворец спорта".

Иконка сетевой папки
Как изменить иконку конкретной сетевой папки?

FileSystemWatcher. Контроль сетевой папки
Привет всем! Подскажите, пожалуйста, будет ли FileSystemWatcher эффективно следить за.

Копирование файлов из сетевой папки
Добрый день толкнулся с проблемой что не могу скопировать файл из сетевой папки. В рамках.

Java Wrapper почему не доступны сетевые ресурсы?

Для работы jar как сервиса windows попробовал использовать java wrapper.
Приложение запустилось нормально.
НО в приложении есть обращение к сетевой папке.
Приложение возвращает ошибку о том, что сетевая папка не существует, хотя она есть.
НО если приложение запустить не через wrapper, то все работает.
Пробовал сервис запускать от своего доменного пользователя (если запускать под ним, то все работает), результат отрицательный.
Пробовал также шару подключать как сетевой диск, НО результат тоже отрицательный.

Прошу помочь решить проблему.

Заранее благодарю за помощь.

  • Вопрос задан более трёх лет назад
  • 316 просмотров

2 комментария

Оценить 2 комментария

а сервис работает под какой учеткой? C другими пробовали

drno-reg

Николай Бараненко @drno-reg Автор вопроса

Sharp: изначально был под local system, потом попробовал из-под своей доменной учетной записи. «Небольшой» нюанс сетевая шара на unix (samba) и пользователь там отличается от доменного 🙂

Решения вопроса 1

drno-reg

Николай Бараненко @drno-reg Автор вопроса
см не кратко

Решил путем смены логики работы с Samba Linux.

перешел на fileToGet и BufferedInputStream/BufferedOutputStream

NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", Samba_User, Samba_Password); // папка откуда забирать String SambaURL = "smb://" + args[0]; // папка куда копировать File destinationFolder = new File(args[1]); File file = new File(args[2]); System.out.println("Запущено с параметрами."); System.out.println("Samba с файлами: " + SambaURL); System.out.println("Локальная папка с файлами для обработки: " + destinationFolder); System.out.println("Log работы в файл: " + file); System.out.println("Чтение файлов в папке Samba: " + SambaURL); // создаем папку если ее нет if (!destinationFolder.exists()) < destinationFolder.mkdirs(); >SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS_"); SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss dd.MM.yyyy"); Date date = new Date(); int StartTime = (int) new Date().getTime(); String StartDateTime = dateFormat.format(date); SmbFile dir = new SmbFile(SambaURL, auth); for (SmbFile f : dir.listFiles()) < try < child = new File(destinationFolder + "/" + f.getName()); fileToGet = new SmbFile(SambaURL + f.getName(), auth); fileToGet.connect(); in = new BufferedInputStream(new SmbFileInputStream(fileToGet)); out = new BufferedOutputStream(new FileOutputStream(child)); byte[] buffer = new byte[4096]; int len = 0; //Read length while ((len = in.read(buffer, 0, buffer.length)) != -1) < out.write(buffer, 0, len); >out.flush(); //The refresh buffer output stream try < printlnAppen(file, "[" + StartDateTime + "]: Скопирован файл - " + f.getName() + "."); >catch (FileNotFoundException e) < e.printStackTrace(); >> catch (Exception e) < String msg = "The error occurred: " + e.getLocalizedMessage(); System.out.println(msg); >finally < try < if (out != null) < out.close(); >if (in != null) < in.close(); >> catch (Exception e) < >>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *