Spring Boot-чтение текстового файла с помощью ResourceLoader
Я пытаюсь прочитать текстовый файл с помощью Spring resource loader следующим образом:
Resource resource = resourceLoader.getResource("classpath:staticSample.txt");
файл находится здесь, в моем проекте Spring boot:
Он отлично работает при запуске приложения в eclipse, но когда я пакую приложение, а затем запускаю его с помощью java - jar, я получаю файл не найден исключение:
java.io.FileNotFoundException: class path resource [static/Sample.txt] cannot be resolved to absolute file path because it does not reside in the
file system: jar:file:/C:/workspace-test/XXX/target/XXX-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static/Sample.txt
Я unziped файл jar образец находится в : XXX-0.0.1-SNAPSHOTBOOT-INFclassesstaticSample.формат txt
может кто-нибудь помочь мне, пожалуйста ?
спасибо заранее!
4 ответов
Я проверил ваш код.Если вы хотите загрузить файл из classpath в Spring Boot JAR, то вам нужно использовать ресурсов.getInputStream(), а не ресурсов.getFile ().Если вы попытаетесь использовать ресурс.getFile () вы получите сообщение об ошибке, потому что Spring пытается получить доступ к пути файловой системы, но не может получить доступ к пути в вашем JAR.
подробно ниже:
пожалуйста resourceLoader.getResource("classpath:static/Sample.txt");
работать с этим кодом при запуске с java -jar XXXX.jar
------ обновление ------
после прохождения ваших кодов проблема в том, что вы пытаетесь прочитать файл с помощью FileInputStream
но на самом деле это находится внутри jar-файла.
но на самом деле вы получаете org.springframework.core.io.Resource
значит, вы получаете InputStream, поэтому вы можете сделать это как new BufferedReader(new InputStreamReader(resource.getInputStream())).readLine();
у меня была та же проблема, и как объяснил @Gipple Lake, с Spring boot вам нужно загрузить файл как inputStream. Поэтому ниже я добавлю свой код в качестве примера, где я хочу прочитать импорт.xml-файл
public void init() {
Resource resource = new ClassPathResource("imports/imports.xml");
try {
InputStream dbAsStream = resource.getInputStream();
try {
document = readXml(dbAsStream);
} catch (SAXException e) {
trace.error(e.getMessage(), e);
e.printStackTrace();
} catch (ParserConfigurationException e) {
trace.error(e.getMessage(), e);
e.printStackTrace();
}
} catch (IOException e) {
trace.error(e.getMessage(), e);
e.printStackTrace();
}
initListeImports();
initNewImports();
}
public static Document readXml(InputStream is) throws SAXException, IOException,
ParserConfigurationException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
dbf.setIgnoringComments(false);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setNamespaceAware(true);
DocumentBuilder db = null;
db = dbf.newDocumentBuilder();
return db.parse(is);
}
я добавил "imports.xml
" ниже src/main/ressources/imports
поместите файлы под resources/static
, это будет в classpath и читать путь, как показано ниже
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
Resource resource = new ClassPathResource("/static/pathtosomefile.txt");
resource.getURL().getPath()