Wie man FileInputStream auf die Datei im Ordner "assets"

Ich wissen, wie die AssetManager zu Lesen File von der res/raw Verzeichnis mit einem InputStream, aber für meinen speziellen Anwendungsfall brauche ich eine FileInputStream. Den Grund brauche ich eine FileInputStream speziell ist, weil ich auf die FileChannel Objekt durch Aufruf getChannel().

Dies ist der code, den ich bisher liest es die Daten (in meinem Fall eine Liste von stammfunktionen) von einem 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;
} 

Hatte ich versucht zu erstellen File aus einer Uri aber, dass nur Ergebnisse in einem FileNotFoundException:

Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");
File file = new File(uri.getPath());
FileInputStream fis = new FileInputStream(file);

Gibt es eine Möglichkeit, die ich bekommen kann eine FileInputStream zu einem File im res/raw Verzeichnis?

  • Ich denke, deine URL ist das problem.Und sollten Sie aus dem Verzeichnis "assets".
  • Also alles, was Sie brauchen, ist zu Lesen, der Inhalt der Datei als int-array? Bin ich richtig?
  • ja, aber ich brauche, um es schnell, die Methode, die ich gab, liest 80K*4 bytes auf und wandeln es in int array von 6-7 ms auf meinem PC
  • Ich hatte auch versucht Uri uri = Uri.parse("android.resource://com.example.empty/" + R.raw.file);
  • Versuchen Sie dies: InputStream myInput = myContext.getAssets().open(YOUR_FILE_NAME)
  • Ich brauche FileInputStream und ich arbeite nicht bei der DB arbeite ich mit der text Datei
  • Ich aktualisiert meine Bemerkung, und Sie müssen nur in der Lage sein, die Datei zu Lesen, richtig?
  • aber es immer noch InputStream
  • FileInputStream myfileInput = getResources().getAssets().open(FILE_NAME); funktioniert.
  • Ich bin "nur" im Stande sein müssen, verwandeln Sie diesen code für Android
  • @MichaelHerasimov ??
  • ok, ich werde es versuchen
  • Ich meine, ich hatte, gab code, liest die Datei aus files Verzeichnis und ich brauche die Datei Lesen, indem Sie diese Methode von raw Verzeichnis
  • open Methode gibt InputStream
  • getResources().getAssets().open() nicht zurück FileInputStream. Es gibt AssetInputStream.
  • und es gibt einen Weg, um FileInputStream aus AssetInputStream?
  • Es scheint der einzige Weg, Ihre Daten zu Lesen ist mit InputStream...
  • aber wie man wiyh nio wenn ich InputStream?
  • Sie brauchen nicht für diese. Konzentration auf das problem, das angezeigt wird, Lesen Sie ein array von ints aus einem InputStream. Sie brauchen nicht einen MappedByteBuffer für, die.
  • Verwandtes problem: stackoverflow.com/questions/30395744/...

Schreibe einen Kommentar