Voici ce que je fais dans une activité de lecture tamponnée étendre / modifier pour répondre à vos besoins
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt")));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDIT: Ma réponse est peut-être inutile si votre question est de savoir comment le faire en dehors d'une activité. Si votre question est simplement de savoir comment lire un fichier à partir d'un actif, la réponse est ci-dessus.
MISE À JOUR :
Pour ouvrir un fichier spécifiant le type, ajoutez simplement le type dans l'appel InputStreamReader comme suit.
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
ÉDITER
Comme le dit @Stan dans le commentaire, le code que je donne ne résume pas les lignes. mLine
est remplacé à chaque passage. C'est pourquoi j'ai écrit //process line
. Je suppose que le fichier contient une sorte de données (c'est-à-dire une liste de contacts) et que chaque ligne doit être traitée séparément.
Dans le cas où vous souhaitez simplement charger le fichier sans aucun traitement, vous devrez résumer mLine
à chaque passe en utilisant StringBuilder()
et en ajoutant chaque passe.
UNE AUTRE MODIFICATION
D'après le commentaire de @Vincent, j'ai ajouté le finally
bloc.
Notez également que dans Java 7 et supérieur, vous pouvez utiliser try-with-resources
pour utiliser les fonctionnalités AutoCloseable
et Closeable
de Java récent.
LE CONTEXTE
Dans un commentaire, @LunarWatcher souligne qu'il getAssets()
s'agit d'un class
in context
. Donc, si vous l'appelez en dehors d'un, activity
vous devez y faire référence et transmettre l'instance de contexte à l'activité.
ContextInstance.getAssets();
Ceci est expliqué dans la réponse de @Maneesh. Donc, si cela vous est utile, augmentez sa réponse, car c'est lui qui l'a souligné.
finally {reader.close();}
.context.getAssets(.....)
Cela ne fonctionne que dans Activity dans toute autre classe que vous devez utiliser
Context
pour cela.Faites en sorte qu'un constructeur pour la classe Utils transmette la référence de l'activité (manière laide) ou du contexte de l'application en tant que paramètre. En utilisant cela, utilisez getAsset () dans votre classe Utils.
la source
Context
.Mieux vaut tard que jamais.
J'ai eu des difficultés à lire les fichiers ligne par ligne dans certaines circonstances. La méthode ci-dessous est la meilleure que j'ai trouvée, jusqu'à présent, et je la recommande.
Usage:
String yourData = LoadData("YourDataFile.txt");
Où YourDataFile.txt est supposé résider dans les actifs /
la source
stream.available()
.la source
input = new BufferedReader(new InputStreamReader(fIn));
.la source
solution en une ligne pour kotlin:
la source
getAssets()
fonctionnera lorsque vous appelez dans la classe Activity.Si vous appelez cette méthode dans une classe non-Activity, vous devez appeler cette méthode à partir du contexte qui est passé de la classe Activity. Voici donc la ligne par laquelle vous pouvez accéder à la méthode.
ContextInstance
peut être passé comme ceci de la classe d'activité.la source
La lecture et l'écriture de fichiers ont toujours été verbeuses et sujettes aux erreurs. Évitez ces réponses et utilisez simplement Okio à la place:
la source
IOException
le bloc try / catch de 2) Fermeture des flux en cas d'exception 3) Ce code lit une seule ligne, pas le fichier entier. En termes de performances, cette bibliothèque est définitivement unique en son genre, sans aucun doute à ce sujet. Maintenant, dites-moi devrais-je toujours éviter "ces réponses" et implémenter Okio juste pour lire des fichiers? La réponse est NON, sauf si cela fait déjà partie de votre application.Voici une méthode pour lire un fichier dans les actifs:
la source
Vous pouvez charger le contenu du fichier. Considérez que le fichier est présent dans le dossier des ressources.
Vous pouvez maintenant obtenir le contenu en appelant la fonction comme suit
Considérant que data.json est stocké dans Application \ app \ src \ main \ assets \ data.json
la source
Dans MainActivity.java
En outre, vous pouvez créer une classe distincte qui fait tout le travail
À mon avis, il vaut mieux créer une interface, mais ce n'est pas nécessaire
la source
Si vous utilisez une autre classe autre que Activité, vous voudrez peut-être faire comme,
la source
En utilisant Kotlin, vous pouvez effectuer les opérations suivantes pour lire un fichier à partir d'actifs dans Android:
la source
C'est peut-être trop tard, mais pour le bien des autres qui recherchent les réponses pêche:
la source
cityfile.txt
la source
File no longer available That file has now been permanently removed and cannot be recovered
La classe Scanner peut simplifier cela.
la source
@HpTerm répond à la version Kotlin:
la source
var mLine:String
devrait êtrevar mLine:String?
var data: String?
devrait être levar data = ""
type de retour devrait êtreString
Voici un moyen d'obtenir un
InputStream
pour un fichier dans leassets
dossier sansContext
,Activity
,Fragment
ouApplication
. Comment obtenez-vous les données à partir de celaInputStream
dépend de vous. Il y a beaucoup de suggestions à ce sujet dans d'autres réponses ici.Kotlin
Java
Tous les paris sont ouverts si une coutume
ClassLoader
est en jeu.la source