Как получить путь к файлу ярлыка, то есть к файлу lnk, когда мы читаем из FileChooser java

Как получить путь к ярлыку, то есть к файлу lnk, когда мы читаем из FileChooser java

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

Это файл, который использовал Chooser

FileChooser fileChooser = new FileChooser();

File file = fileChooser.showOpenDialog(argument);

здесь файл всегда указывает на целевой файл


person Harish M S    schedule 18.09.2020    source источник
comment
.lnk - это полноценный формат, в котором хранится довольно много данных. Если ваш сервер генерирует их, изучите их атрибуты и выберите, где находятся нужные вам данные. В противном случае вот описание формата: docs.microsoft.com/en-us/openspecs/windows_protocols/ms-shllink/   -  person M. Prokhorov    schedule 18.09.2020
comment
Мы выбираем lnk-файл, но он указывает на целевой файл. Проблема в том, что нам нужно узнать путь к файлу ярлыка, когда мы выбираем файл ярлыка, он всегда указывает и принимает целевой путь. Как определить путь к файлу ярлыка. Пример: наш ярлык находится на рабочем столе, а его целевой файл находится на диске «D» [некоторый диск]. Когда мы выбираем файл ярлыка с рабочего стола, он всегда переходит на диск «D». Нам нужен сокращенный путь к файлу, который находится на рабочем столе. Мы не идем по этому пути. Мы можем получить путь к целевому файлу, но не можем получить путь к файлу ярлыка.   -  person Harish M S    schedule 20.09.2020
comment
Вы имеете в виду этот FileChooser?   -  person Abra    schedule 20.09.2020


Ответы (1)


Предполагая, что вы используете JavaFx FileChooser: FileChooser вернет исходный путь .lnk к файлу, если вы добавите .lnk в список расширений файлов, в противном случае он, похоже, разрешит имя пути в качестве цели ссылки.

Попробуйте этот фрагмент кода для запуска FileChooser. Выберите файл LNK. Он напечатает исходный путь к файлу LNK, даже если ссылка ведет на файл JPG:

FileChooser fc = new FileChooser();
fc.setTitle("Select a lnk");
fc.setInitialDirectory(dir.toFile());
ObservableList<ExtensionFilter> extensionFilters = fc.getExtensionFilters();
extensionFilters.addAll(new ExtensionFilter("Shortcuts", "*.lnk"), new ExtensionFilter("Images", "*.jpg"));
File f = fc.showOpenDialog(primaryStage);
System.out.println("f="+f);
person DuncG    schedule 20.09.2020
comment
Спасибо! много, это сработало для меня. Большое Вам спасибо:) - person Harish M S; 23.09.2020
comment
Если вы проголосуете за или примете полезные ответы, это поможет сообществу SO. - person DuncG; 24.09.2020
comment
Есть ли другой способ определить путь к файлу ярлыка, поскольку есть вероятность, что пользователь сделает ошибку при выборе раскрывающегося меню [Ярлыки / изображения] - person Harish M S; 03.01.2021