Как сканировать файл txt из jar-файла
Я хочу считать текст с файла output.txt и вывести его через JOptionPane, но, естественно, он не считывается. Не могли бы вы намекнуть, как использовать файл из jar?
Файл существует в jar файле:
import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) throws IOException {
Scanner my = new Scanner(new File("output.txt"));
String result = my.nextLine();
JOptionPane.showConfirmDialog(null, result);
}
}
Ответы (2 шт):
Если текстовый файл находится в том же jar-файле, который запускается, для его чтения следует использовать не File, а InputStream, который следует получить при помощи метода ClassLoader::getResourceAsStream. При условии, что файл output.txt находится в корне jar-файла, можно использовать Thread.currentThread().getContextClassLoader().getResourceAsStream("output.txt") или getClass().getResourceAsStream("/output.txt").
Также стоит использовать try-with-resources для автоматического закрытия сканера/потока ввода.
import javax.swing.*;
import java.io.*;
import java.util.*;
public class HelloWorld {
public static void main(String[] args) throws IOException {
try (Scanner my = new Scanner(Thread.currentThread()
.getContextClassLoader().getResourceAsStream("output.txt"))
) {
String result = my.nextLine();
JOptionPane.showConfirmDialog(null, result);
};
}
}
Вытащить файл из jar-архива и положить его в папку с проектом. Лучше положить в корневой каталог, чтобы лучше было считывать от туда.
Структура jar это упакованный архив в zip формате. Поэтому читать файл из него можно только если использовать этот протокол. Можно также читать специальный URL, который поддерживает этот формат.
jar:file://файл.jar!/output.txt
Подробнее о jar файлах можно прочитать в Java Tutorial.
