Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получит путь к прграмме на различных ОС 
V
    Опции темы
Samotnik
Дата 8.10.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Привет. 
Нужно на Java получить путь к программе (к файлу запускающую эту программу). 
Т.е.  к примеру:  нужно java средствами получить путь к  Фотошопу, или путь к Ворду, или к Винампу  и т.д.
При том что нужно  это сделать для Windows, Linux, MacOS smile 
 smile 

PM MAIL   Вверх
sergioK
Дата 9.10.2009, 00:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Samotnik @ 8.10.2009,  15:19)
Привет. 
Нужно на Java получить путь к программе (к файлу запускающую эту программу). 
Т.е.  к примеру:  нужно java средствами получить путь к  Фотошопу, или путь к Ворду, или к Винампу  и т.д.
При том что нужно  это сделать для Windows, Linux, MacOS smile 
 smile

сначала выясняешь какая ОС 
Код

 public static void main(String[] args)
    {
      Collection list=newHash();
       map.put("win","winCommand");
      map.put("mac","macCommand");
     map.put("linux","LinuxCommand");     // 

     
       String  os = System.getProperty( "os.name").trim().toLowerCase();   // это защита от дураков  :-D 
       Runtime.getRuntime().exec(map.get(os));
       }

 
 хотя код может и неработать, писал  из головы,   да и проверь на каждой системе что она дает при вызове  
Код

   System.getProperty( "os.name");
и результат пиши в мэп  
  



PM MAIL   Вверх
Samotnik
Дата 12.10.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



sergioK,  и что это такое ? smile Ваш кусок кода поможет реализовать то, что написанно в названии топика ? 
Вобщем, для Windows  я разобрался, там нужно была работа с реестром, c помощью reg.exe 
Теперь остается вопрос, как тоже самое реализовать на MacOS ?  smile 
PM MAIL   Вверх
sergioK
Дата 12.10.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Samotnik @ 12.10.2009,  10:46)
sergioK,  и что это такое ? smile Ваш кусок кода поможет реализовать то, что написанно в названии топика ? 
Вобщем, для Windows  я разобрался, там нужно была работа с реестром, c помощью reg.exe 
Теперь остается вопрос, как тоже самое реализовать на MacOS ?  smile

сорри перепутал отвечал на вопрос из другой ветки здесь 
PM MAIL   Вверх
Samotnik
Дата 12.10.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(sergioK @  12.10.2009,  11:04 Найти цитируемый пост)
сорри

да ничего smile  smile 


PM MAIL   Вверх
LSD
Дата 13.10.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Вопрос составлен так, что вообще нефига не понятно. К какой программе нужно получить путь? Откуда вообще берутся эти программы?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samotnik
Дата 13.10.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(LSD @  13.10.2009,  11:52 Найти цитируемый пост)
Вопрос составлен так, что вообще нефига не понятно. К какой программе нужно получить путь? Откуда вообще берутся эти программы? 

Ну смотри, есть метод openFile(String name_of_programm, String name_of_file)
Этот метод, должен открыть тот файл, который пришел к нему в параметрах, в программе, которая тоже пришла в параметрах. На разных ОС.
Метод принимает два параметра, имя программы и имя файла.  

Очень простой пример : 
Код


public static void main (String ... args) {
openFile("photoShop", "1.jpg");
}
.....
openFile (String np, String nf) {
if (np.equals("photoshop")) {
то вот тут нужно написать код, который откроет файл 1.jpg в Фотошопе
}
}

и так далее.
Теперь более понятно ?
PM MAIL   Вверх
AlexeyVorotnikov
Дата 13.10.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Цитата(Samotnik @  13.10.2009,  13:12 Найти цитируемый пост)
Теперь более понятно ? 

Не совсем. Что есть имя программы?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Skynin
Дата 13.10.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



AlexeyVorotnikov
Как понял человек хочет запустить программу установленную на десктопе с набором нужных параметров.
Утрировано - сформировать нужные аргументы для java.lang.Runtime.exec

PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
sergioK
Дата 13.10.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(Samotnik @ 13.10.2009,  12:12)
Цитата(LSD @  13.10.2009,  11:52 Найти цитируемый пост)
Вопрос составлен так, что вообще нефига не понятно. К какой программе нужно получить путь? Откуда вообще берутся эти программы? 

Ну смотри, есть метод openFile(String name_of_programm, String name_of_file)
Этот метод, должен открыть тот файл, который пришел к нему в параметрах, в программе, которая тоже пришла в параметрах. На разных ОС.
Метод принимает два параметра, имя программы и имя файла.  

Очень простой пример : 
Код


public static void main (String ... args) {
openFile("photoShop", "1.jpg");
}
.....
openFile (String np, String nf) {
if (np.equals("photoshop")) {
то вот тут нужно написать код, который откроет файл 1.jpg в Фотошопе
}
}

и так далее.
Теперь более понятно ?


а так не работает ? или это только для винды ?
Код

    public void view (){
         Desktop desktop= Desktop.getDesktop();
         File file=new File("atext.txt");
         try {
         desktop.open(file);        
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        
    }


хотя Я тоже подумал как Skynin
т,е ,  как открыть файл в определенной программе на конкретной ОС,  (это другой форум  smile ) 
т,е, как сформировать командную  строку случае окон ( cmd  notepad myFile.txt) 


к модераторам 
это надо добавить в список часто задаваемых вопросов, IMHO









Это сообщение отредактировал(а) sergioK - 13.10.2009, 13:47
PM MAIL   Вверх
LSD
Дата 13.10.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Samotnik @  13.10.2009,  12:12 Найти цитируемый пост)
Этот метод, должен открыть тот файл, который пришел к нему в параметрах, в программе, которая тоже пришла в параметрах. На разных ОС.
Метод принимает два параметра, имя программы и имя файла.

Это называется ассоциированая команда. Вообщем и целом это никак не стандартизованно, более того каждая графическая среда может иметь свои настройки.

Для Windows это делает так:
Код

C:\>assoc .docx
.docx=Word.Document.12

C:\>ftype Word.Document.12
Word.Document.12="C:\Program Files\Microsoft Office\Office12\WINWORD.EXE" /n /dde

Для MacOS узнавай команды на форуме по MacOS. К Java эта проблема отношения не имеет.


P.S. Кстати, а Desktop.open() не устроит?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samotnik
Дата 13.10.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Вижу, что не совсем понятно обьяснил ... 
Вобщем вот, как я сделал, для того чтобы открыть  Аутлук и ОпенОфис на windows
Код

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;

public class UsingReg {

  private static final String REGQUERY_UTIL = "reg query ";
  private static final String REGSTR_TOKEN = "REG_SZ";    
  
  private static final String OPENOFFICE_FOLDER_CMD = REGQUERY_UTIL +
    "\"HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\"
     + "App Paths\\soffice.exe\" ";
  
  private static final String MSOUTLOOK_FOLDER_CMD = REGQUERY_UTIL +
    "\"HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\"
    + "App Paths\\OUTLOOK.exe\" ";
  
  static class StreamReader extends Thread {
    private InputStream is;
    private StringWriter sw;

    StreamReader(InputStream is) {
      this.is = is;
      sw = new StringWriter();
    }

    public void run() {
      try {
        int c;
        while ((c = is.read()) != -1)
          sw.write(c);
        }
        catch (IOException e) { 
         e.printStackTrace();
        }
      }

    String getResult() {
      return sw.toString();
    }
  }
  
  protected static void openOOFile(String name) 
  {
        try {
            Process process = Runtime.getRuntime().exec(OPENOFFICE_FOLDER_CMD);
            StreamReader reader = new StreamReader(process.getInputStream());          
            
            reader.start();
            process.waitFor();
            reader.join();

            String result = reader.getResult();
            int p = result.indexOf(REGSTR_TOKEN);            
            
            if (p == -1)
             throw new Exception("No record in this registry");
           
            int start = p + REGSTR_TOKEN.length();
            int end = result.substring(p + REGSTR_TOKEN.length()).trim().indexOf("\n") + start; 
            String res = result.substring(start, end).trim();        
            Runtime.getRuntime().exec(new String[]{res, "\"\"" + name + "\"\""});
          }
          catch (Exception e) {
            e.printStackTrace();
          }
   }
  
  protected static void openMSOFile(String name) 
  {
        try {
            Process process = Runtime.getRuntime().exec(MSOUTLOOK_FOLDER_CMD);
            StreamReader reader = new StreamReader(process.getInputStream());          
            
            reader.start();
            process.waitFor();
            reader.join();

            String result = reader.getResult();
            int p = result.indexOf(REGSTR_TOKEN);            
            
            if (p == -1)
             throw new Exception("No record in this registry");
            String tmp = result.substring(p + REGSTR_TOKEN.length()).trim();
            String strMain = tmp.substring(tmp.indexOf(REGSTR_TOKEN) + REGSTR_TOKEN.length()).trim();       
            Runtime.getRuntime().exec(new String[]{strMain, "/f", name});
            
          }
          catch (Exception e) {
            e.printStackTrace();
          }
   }
  
  protected static File whichOOffice() {
      try {
          Process which = Runtime.getRuntime().exec("which openoffice");
          BufferedReader reader = new BufferedReader(new InputStreamReader(which.getInputStream()));
          return new File(reader.readLine());
      } catch (IOException e) {
          throw new RuntimeException(e);
      }
  }
}

вот таким образом я запускаю эти программы, на виндовс  smile
терь нужно каким то образом запустить на Маках 
PM MAIL   Вверх
Skynin
Дата 13.10.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 6
Всего: 10



Цитата

терь нужно каким то образом запустить на Маках 

Узнать точно так же как про "reg query " узнали. Java тут ни при чем.

Я кстати только что узнал о такой возможности Windows smile
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
LSD
Дата 14.10.2009, 14:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Samotnik @  13.10.2009,  16:23 Найти цитируемый пост)
Вобщем вот, как я сделал, для того чтобы открыть  Аутлук и ОпенОфис на windows

А если человек пользуется portable версией OpenOffice то будет epic fail smile

Ну и самое главное, это то, что к Java эта проблема отношения не имеет.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samotnik
Дата 14.10.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(LSD @  14.10.2009,  14:33 Найти цитируемый пост)
А если человек пользуется portable версией OpenOffice то будет epic fail

which solution ? 

Цитата(LSD @  14.10.2009,  14:33 Найти цитируемый пост)
Ну и самое главное, это то, что к Java эта проблема отношения не имеет. 

ну как это ? smile  А может уже кто-нибудь делал что-то подобное ?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0978 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.