Получить путь к программе, связанной с файлом - PullRequest
0 голосов
/ 10 апреля 2019

Учитывая файл, я хочу найти программный способ в Java, чтобы получить путь к исполняемому файлу, с которым связан этот файл (это Windows). Я делаю это потому, что хочу запустить другое приложение от себя. Мне также нужно знать, когда файл закрыт, чтобы я мог обновить данные в своем приложении.

В настоящее время он работает с использованием процесса, но я жестко закодировал путь к exe, так что кажется, что это недостающий фрагмент. Я почти уверен, что мне нужно искать в реестре эту информацию, но в папке Computer \ HKEY_CLASSES_ROOT {fileExt} я вижу только папку с именем ShellEx и в ней два странных значения, например {2EC1BE78-0401-44B1-87EF-1A5966D5C5D0 }. Любое предложение о том, как поступить?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Почему бы не использовать Desktop.open (), чтобы открыть файл в связанном собственном приложении, например, файл, который вы хотите открыть, это c: \ somefile.png, открыть его в связанном приложении просто, как

 Desktop desk = Desktop.getDesktop();
 desk.open(new File("c:/somefile.png"));

Что касается другой части, вы можете использовать API службы Java Watch, чтобы определить, изменился ли файл, пока он был открыт.

https://www.baeldung.com/java-nio2-watchservice

https://howtodoinjava.com/java8/java-8-watchservice-api-tutorial/

В качестве альтернативы в Apache Commons IO имеется также File Monitor https://commons.apache.org/proper/commons-io/

Небольшое сравнение этих двух можно найти здесь: https://www.baeldung.com/java-watchservice-vs-apache-commons-io-monitor-library

0 голосов
/ 10 апреля 2019

В Windows это можно получить с помощью команд командной строки ftype и assoc, как вы можете видеть в следующем примере:

Prompt>assoc .docx
.docx=Word.Document.12

Prompt>ftype Word.Document.12
Word.Document.12="C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE" /n "%1" /o "%u"

Таким образом, проблема сводится к тому, как запускать команды командной строкии читая их результаты, на Java.Об этом должно быть много сообщений (простой Google привел меня к этому URL ).

...