Мне нужно знать, как лучше всего экспортировать файл Excel в мой код .jar.

Я использовал оператор открытия файла GetDesktop, и он хорошо работает, когда я запускаю его внутри Eclipse IDE. Но когда я экспортирую свой код в .JAR, лист Excel не открывается, он ничего не делает.

public void actionPerformed(ActionEvent e) {
 try { Desktop desktop = null;
if (Desktop.isDesktopSupported()) {
    desktop = Desktop.getDesktop();
}
    desktop.open(new File("Resources/pics/chart 2.xls"));
} catch (IOException ioe) {
      ioe.printStackTrace();
}}

У меня есть изображение в jframe, и у меня есть 2 кнопки внутри изображения, на которые пользователь может нажать. В зависимости от того, на какую кнопку они нажимают, мне нужно открыть этот определенный файл Excel. Просто для просмотра, никакого редактирования не требуется. Я пытался использовать apache POI, но файл excel вообще не открывался, но когда я использую приведенный выше код, по крайней мере, он открывается в eclipse. Я вижу, что есть и другие с такой же проблемой, но мне нужно просто открыть Excel, а не редактировать. Благодарность

0
Elie 1 Ноя 2019 в 01:32
Вам нужно скопировать/распаковать разворот excel из Jar на локальный диск — помните, файл Jar — это просто zip-файл.
 – 
MadProgrammer
1 Ноя 2019 в 01:39
Я пытаюсь сделать свою программу как можно более полной, чтобы, если я запустил ее на другом ПК, мне не пришлось копировать файлы Excel на локальный диск. Я видел, что некоторые другие программисты открывали файлы Excel через эти программы. Я надеюсь, что это может быть сделано.
 – 
Elie
1 Ноя 2019 в 17:05
Извините, исправление, некоторые другие программисты извлекли информацию из этих файлов Excel, но я пытаюсь открыть файл Excel.
 – 
Elie
1 Ноя 2019 в 17:23
Да не беда, Excel не может прочитать встроенный ресурс, его ОБЯЗАТЕЛЬНО нужно извлечь на локальный компьютер
 – 
MadProgrammer
1 Ноя 2019 в 23:22
Мне просто интересно, почему он открывается внутри eclipse, а не при экспорте?
 – 
Elie
2 Ноя 2019 в 01:44

1 ответ

Вы должны скопировать его из банки. Вы можете получить входной поток, используя InputStream in = ClassYouAreIn.class.getResource("someFile.xls"). Вот пример:

try (InputStream in = ClassYouAreIn.class.getResource("someFile.xls")) {
    // copy it here, for example using:
    Files.copy(in, Paths.get("somefile.xls"), StandardCopyOption.REPLACE_EXISTING);
}

NB: Ваш код перехвата действительно плох: исключения содержат 4 интересных бита информации (тип, сообщение, трассировка стека, причинно-следственная цепочка), и вы отбрасываете 3 из 4 вещей, И вы вызываете каскад ошибок, не прерывая. Вы всегда должны просто бросать их дальше (поместите throws IOException в этот метод), если у вас нет АКТУАЛЬНОЙ стратегии для решения этой проблемы (и регистрация/печать не имеет отношения к этому!).

0
rzwitserloot 1 Ноя 2019 в 01:49
Я попробовал, и Eclipse пытается перейти с getResource на getResourceAsStream, это правильно? и у меня есть исключение IOException в моем основном методе. Но даже с getResourceAsStream он ничего не выдал.
 – 
Elie
1 Ноя 2019 в 17:10
Да, это правильно. Это выведет что-то или выдаст ошибку, если вы не видите ошибку, вы перехватываете исключение и где-то его игнорируете.
 – 
rzwitserloot
1 Ноя 2019 в 19:14