Comment obtenir FileInputStream de Fichier dans le dossier des actifs
Je sais comment utiliser le AssetManager
de lire un File
de la res/raw
répertoire avec un InputStream
, mais pour mon cas d'utilisation, j'ai besoin d'un FileInputStream
. La raison que j'ai besoin d'un FileInputStream
plus précisément, c'est parce que j'ai besoin pour obtenir le FileChannel
objet à partir d'elle, en appelant getChannel()
.
C'est le code que j'ai à ce jour, il lit les données (dans mon cas une liste de primitives) à partir d'un File
:
public static int[] loadByMappedBuffer(Context context, String filename) throws IOException{
FileInputStream fis = context.openFileInput(filename);
FileChannel ch = fis.getChannel();
MappedByteBuffer mbuff = ch.map(MapMode.READ_ONLY, 0, ch.size());
IntBuffer ibuff = mbuff.asIntBuffer();
int[] array = new int[ibuff.limit()];
ibuff.get(array);
fis.close();
ch.close();
return array;
}
J'avais essayé de créer File
à partir d'un Uri
, mais les résultats dans un FileNotFoundException
:
Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");
File file = new File(uri.getPath());
FileInputStream fis = new FileInputStream(file);
Est-il un moyen que je peux obtenir un FileInputStream
à un File
dans le res/raw
répertoire?
Je pense que votre URL est le problème.Et vous devez ajouter dans le répertoire actif.
Donc, tout ce que vous devez est de lire le contenu du fichier comme int tableau? Suis-je la corriger?
oui, mais j'ai besoin de le faire rapidement, la méthode que j'ai donné lit 80*4 octets et de le transformer en int tableau de 6 à 7 ms sur mon PC
J'avais aussi essayé
Essayez ceci: InputStream myInput = myContext.getAssets().ouvert(YOUR_FILE_NAME)
Donc, tout ce que vous devez est de lire le contenu du fichier comme int tableau? Suis-je la corriger?
oui, mais j'ai besoin de le faire rapidement, la méthode que j'ai donné lit 80*4 octets et de le transformer en int tableau de 6 à 7 ms sur mon PC
J'avais aussi essayé
Uri uri = Uri.parse("android.resource://com.example.empty/" + R.raw.file);
Essayez ceci: InputStream myInput = myContext.getAssets().ouvert(YOUR_FILE_NAME)
OriginalL'auteur Mike Herasimov | 2015-05-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir un
FileInputStream
à une ressource dans votre actif comme celui-ci:La
fileName
que vous fournissez àopenFd()
doit être le chemin d'accès relatif à l'actif, la mêmefileName
vous offre àopen()
.Alternativement, vous pouvez également créer le
FileInputStream
comme ceci:OriginalL'auteur Xaver Kapeller