Измените локальный адрес в формате UNC с адресом, начиная с общей папки - PullRequest
0 голосов
/ 04 ноября 2011

Мне нужно изменить свой локальный адрес в формате UNC с адресом, хранящимся в формате:

Имя компьютера ИЛИ Имя сервера / Имя общей папки и связанный путь / Имя файла

Например , если адрес на локальном компьютере равен

D:\Workspace\Task Management System\TBMS\src\com\common\dao\fileName.xls

и common - это общая папка , тогда требуемый адрес должен быть похож на

ashish:\common\dao\filename.xls

где ashish - мое имя компьютера

Предоставляет ли Java какой-либо API или класс, который может реализовать такое преобразование, или есть какой-то метод, с помощью которого я могу это сделать?


Через сетевой ресурс я получил имя для всех общих папок. Могу ли я получить только папку с общим именем?

Мой код:

String line = null;
String[] commands = new String[] { "cmd", "/C", "net share" };

Process child = Runtime.getRuntime().exec(commands);
InputStream ins = child.getInputStream();
BufferedReader buffReader = new BufferedReader(new InputStreamReader(ins));

while (!(line = buffReader.readLine()).trim().equals("The command completed successfully."))    
{
    System.out.println(line);
}

Есть ли какой-нибудь способ получить информацию только о моих общих папках, а не о папках по умолчанию?

1 Ответ

1 голос
/ 04 ноября 2011

Обратите внимание, что для одного файла может быть несколько путей UNC. Например,

D:\Workspace\Task Management System\TBMS\src\com\common\dao\fileName.xls можно получить как \\ashish\common\dao\filename.xls

потому что

D:\Workspace\Task Management System\TBMS\src\com\common используется как common

на машине с именем ashish. Если была еще одна акция

D:\Workspace\Task Management System\TBMS\src\com\common\dao как dao

тогда к нему также можно получить доступ как \\ashish\dao\filename.xls

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

Далее, как вы узнаете, является ли папка общей? Я не знаю ничего о какой-либо библиотеке, которая позволяет вам управлять окнами с общим доступом в Java, но, вероятно, есть такая. Даже если этого не произойдет, будет просто проанализировать вывод net share, который в Windows XP выдает следующий результат:

Share name   Resource                        Remark

-------------------------------------------------------------------------------
C$           C:\                             Default share                     
ADMIN$       C:\WINDOWS                      Remote Admin                      
IPC$                                         Remote IPC                        
tmp          c:\tmp       

Вам нужно будет игнорировать специальные акции, такие как C$.

Наконец, вам нужно указать имя компьютера. Вы можете использовать System.getenv("COMPUTERNAME").

Итак, псевдокод:

  1. Начните с \\ (\\)
  2. Добавить имя компьютера (\\ashish)
  3. Добавить \ (\\ashish\)
  4. Добавить общее имя ближайшего родителя файла (\\ashish\common)
  5. Добавить остаток от полного имени файла (\\ashish\common\dao\filename.xls)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...