2010-01-11 7 views
3

Я занимаюсь написанием кросс-платформенного приложения на основе Swing, в котором я хочу использовать ассоциацию файлов, зарегистрированную в ОС.Использование ассоциации файлов в приложении Java

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

Есть ли что-то еще, что связано с регистрацией ассоциации файлов? Или Java может сделать это для меня?

+0

Планируете ли вы использовать это только с окнами? – stacker

+0

Нет - перекрестная платформа, iv исправлена ​​вопрос – Dan

+0

Вы сделали это на Linux и OSX? – KrzyH

ответ

5

Я не уверен, но я ожидаю, что имя файла, обрабатываемого щелчком файла, окажется в аргументах вашего метода main(). Вы пробовали/проверяли это?

1

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

1

Расширения могут быть связаны с приложениями, вы можете установить ключи реестра во время установки. Какие ключи вам нужно документирована здесь:

http://support.microsoft.com/?scid=kb%3Ben-us%3B185453&x=6&y=11

От Java вы не можете получить доступ к реестру окна прямым способом. Используя время выполнения вы могли бы сделать что-то подобное http://www.rgagnon.com/javadetails/java-0480.html

2

Если это на ОС Windows (вы не указали):

В реестре, где вы указали свой путь к приложению для данного типа файла, зарегистрированного на него, добавить до "%1". Это особый параметр, который Windows заполнит путём файла, который был нажат. Таким образом, ваша запись в реестре будет выглядеть примерно так: c:\path\to\app.exe "%1"

+0

Нет его крест платформы. – Dan

1

В Windows есть две команды, которые могут помочь, установить связь и тип файла, так что вам не нужно делать грязное белье для управления реестром. Вызовите команды, используя, скажем, java.lang.Process. http://www.rgagnon.com/javadetails/java-0592.html