Comment puis-je obtenir de ressources Java dans un Fichier?
Je dois lire un fichier contenant une liste de chaînes de caractères. Je suis en train de suivre les conseils en ce post. Les deux solutions requièrent l'utilisation de FileUtils.readLines
, mais l'utilisation d'une String
, pas un File
en tant que paramètre.
Set<String> lines = new HashSet<String>(FileUtils.readLines("foo.txt"));
J'ai besoin d'un File
.
Ce post serait ma question, à l'exception de l'OP a été dissuadés de faire usage de fichiers entièrement. J'ai besoin d'un fichier si je veux utiliser Apache méthode, qui est mon préféré de solution à mon problème initial.
Mon fichier est de petite taille (une centaine de lignes) et un singleton par instance de programme, donc je n'ai pas besoin de vous soucier d'avoir une autre copie du fichier en mémoire. Donc je pouvais utiliser plusieurs méthodes de base pour lire le fichier, mais pour l'instant il ressemble FileUtils.readLines
pourrait être plus propre. Comment puis-je passer de la ressource de fichier.
- Si c'est un chemin de classe de ressource, vous ne devriez pas être à l'aide de la
File
type. Pensez à utiliser Google Goyave bibliothèqueResources.readLines
méthode.
Vous devez vous connecter pour publier un commentaire.
Apache Commons-IO a un IOUtils classe ainsi que d'un FileUtils, qui comprend un
readLines
méthode similaire à celle de FileUtils.De sorte que vous pouvez utiliser
getResourceAsStream
ougetSystemResourceAsStream
et de transmettre le résultat de ce queIOUtils.readLines
pour obtenir unList<String>
le contenu de votre fichier:File
un fichier existant dans le système de fichiers a un chemin. Les ressources peuvent être une partie d'un fichier jar et vous ne pouvez pas se référer à une partie seulement d'un bocal (ou zip) à travers un chemin. Ce que vous pouvez faire est d'obtenir un flux de données à un fichier ou un flux de données dans un fichier compressé dans une archive qui aussi s'ouvre à la volée.Je suis en supposant que le fichier que vous souhaitez lire est une vraie ressource sur votre classpath, et pas simplement quelques fichiers arbitraires vous pouviez accéder via
new File("path_to_file");
.Essayez les opérations suivantes à l'aide de
ClassLoader
, oùresource
est unString
représentation du chemin d'accès à votre fichier de ressources dans votre chemin de classe.Valide
String
valeurs pourresource
peuvent inclure:"foo.txt"
"com/company/bar.txt"
"com\\company\\bar.txt"
"\\com\\company\\bar.txt"
et le chemin d'accès n'est pas limité à
com.company
Code pour obtenir un
File
pas dans un BOCAL:Alternativement, si la ressource est dans un POT, vous devrez utiliser
Class.getResourceAsStream(resource);
et parcourir le fichier en utilisant unBufferedReader
pour simuler l'appel àreadLines()
./com/mysite/app/file.txt"
?/
. Je l'ai testé sur Windows 7 et mis à jour avec mon succès des cas de test. Ne fonctionne pas avec.
comme un séparateur de chemin.new File(url.toURI())
de travail pour les ressources dans les fichiers JAR?getResourceAsStream()
et unBufferedReader
en place d'un appel àFileUtils
.l'utilisation d'une ressource pour lire le fichier en une chaîne:
à l'aide de inputstream: