J'essaie de lire un fichier texte à l'aide du chargeur de ressources Spring, comme ceci:
Resource resource = resourceLoader.getResource("classpath:\\static\\Sample.txt");
Le fichier se trouve ici dans mon projet de démarrage Spring:
Cela fonctionne bien lorsque l'application est exécutée dans Eclipse, mais lorsque je la compresse puis l'exécute à l'aide de Java –jar, le message file not found est excepté:
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
J'ai décompressé le fichier Jar dans lequel l'échantillon se trouve: XXX-0.0.1-SNAPSHOT\BOOT-INF\classes\static\Sample.txt
Quelqu'un peut m'aider s'il vous plaît?
Merci d'avance!
J'ai vérifié votre code. Si vous souhaitez charger un fichier à partir de classpath dans un fichier JAR de démarrage, vous devez utiliser resource.getInputStream () plutôt que resource.getFile () .If Si vous essayez d'utiliser resource.getFile (), vous recevrez un message d'erreur, car Spring tente d'accéder à un chemin d'accès au système de fichiers, mais ne peut pas accéder à un chemin d'accès dans votre fichier JAR.
détail comme ci-dessous:
S'il vous plaît essayer resourceLoader.getResource("classpath:static/Sample.txt");
Travailler avec ce code lorsqu'il est exécuté avec Java -jar XXXX.jar
------ mettre à jour ------
Après avoir parcouru vos codes, le problème est que vous essayez de lire le fichier avec la variable FileInputStream
, mais qu’il se trouve en réalité dans le fichier jar.
Mais en réalité, vous obtenez le org.springframework.core.io.Resource
, ce qui signifie que vous obtenez le InputStream, de sorte que vous pouvez le faire comme suit: new BufferedReader(new InputStreamReader(resource.getInputStream())).readLine();
J'ai eu le même problème et comme l'explique @Gipple Lake, avec Spring Boot, vous devez charger le fichier en tant qu'entréeStream. Donc ci-dessous, je vais ajouter mon code à titre d'exemple, où je veux lire le fichier import.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);
}
J'ai ajouté "imports.xml
" ci-dessous src/main/ressources/imports
Placez les fichiers sousresources/static
, ce sera dans classpath et lisez le chemin comme ci-dessous
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
Resource resource = new ClassPathResource("/static/pathtosomefile.txt");
resource.getURL().getPath()