Größe der Datei, die wir durch AssetManager Funktion getAssets in Android bekommen

AssetManager mngr = getAssets(); test_file = mngr.open("sample.txt"); 

Oberhalb der test_file-Variable ist vom InputStream-Typ. Irgendeine Möglichkeit, die Dateigröße von sample.txt zu berechnen?

  • RecyclerView Animation auf Artikel klicken
  • Android benutzerdefinierte EditText UI
  • VersionCode / versionName bug
  • Android und ActionBarCompat: Wie kann man die Sichtbarkeit von Aktionen zur Laufzeit auf Pre-ICS-Geräten ändern?
  • Wie kann man überprüfen, was die neueste Version einer Abhängigkeit ist, die in gradle verwendet werden soll
  • Machen Sie Android App erscheinen, wie für Tabletten entworfen
  • Wie kann ich das Zoom-Steuerelement in einer Android-Webview verstecken?
  • Android Studio E / dalvikvm: Die Klasse '.DatabaseHelper' konnte nicht gefunden werden, referenziert von der Methode .DatabaseManager
  • Richtige Art, Realm Migration Android zu machen
  • Wie man eingehenden Anruf und ausgehenden Anruf in Android zu identifizieren
  • Android teilen Bilder aus Assets Ordner
  • ActivityUnitTestCase wirft RuntimeException aus, wenn es mit AndroidJUnitRunner ausgeführt wurde
  • 4 Solutions collect form web for “Größe der Datei, die wir durch AssetManager Funktion getAssets in Android bekommen”

    Ich denke, das wird für Sie arbeiten:

     test_file.available(); 

    Android-Entwickler-Website:

     final int available() Returns an estimated number of bytes that can be read or skipped without blocking for more input. 

    Ich habe eine Alternative, um eine Datei in Assets mit AssetFileDescriptor zu erhalten:

     AssetFileDescriptor fd = getAssets().openFd("test.png"); Long size = fd.getLength(); 

    Ich hoffe es hilft.

     test_file.available(); 

    Ist nicht eine sehr zuverlässige Methode, um die Dateilänge zu bekommen, wie in den docs angegeben ist.

     size = fd.getLength(); 

    Mit dem FileDescriptor wie von Ayublin gezeigt ist!

    Seine Antwort sollte auf die richtige Antwort gefördert werden.

    inputStream.available() könnte mit der Dateigröße übereinstimmen, wenn die Datei sehr klein ist, aber für größere Dateien wird es nicht erwartet, dass sie übereinstimmen.

    Für einen komprimierten Asset ist der einzige Weg, um die Größe zuverlässig zu bekommen, um es in das Dateisystem zu kopieren, ex: context.getCacheDir() dann lesen Sie die Länge der Datei von dort aus. Hier ist ein Beispielcode, der das tut. Es ist wohl auch sinnvoll, die Datei aus dem Cache-Verzeichnis zu verwenden, im Gegensatz zu den Assets danach.

     String filename = "sample.txt"; InputStream in = context.getAssets().open(filename); File outFile = new File(context.getCacheDir(), filename); OutputStream out = new FileOutputStream(outFile); try { int len; byte[] buff = new byte[1024]; while ((len = in.read(buff)) > 0) { out.write(buff, 0, len); } } finally { // close in & out } long theRealFileSizeInBytes = outFile.length(); 

    Sie sollten auch die Datei aus dem Cache-Verzeichnis löschen, wenn Sie damit fertig sind (und der gesamte Cache-Verzeichnis wird auch automatisch gelöscht, wenn Sie die App deinstallieren).

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.