inputStream.available()
puede coincidir con el tamaño del archivo si el archivo es muy pequeño, pero para archivos más grandes no se espera que coincida.
Para un activo comprimido, la única forma de obtener el tamaño confiablemente es copiarlo en el sistema de archivos, por ejemplo: context.getCacheDir()
y luego leer la longitud del archivo desde allí. Aquí hay un código de muestra que hace esto. Probablemente también tenga sentido usar el archivo del directorio de caché en lugar de los activos después de esto.
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();
También debe eliminar el archivo desde el directorio de caché cuando haya terminado con él (y todo el directorio caché también se eliminarán de forma automática cuando se desinstala la aplicación).
por favor, haga un poco más de esfuerzo para hacer preguntas. Intente leer las preguntas frecuentes http://stackoverflow.com/faq para obtener más información sobre cómo hacer preguntas – Janusz
Ok, gracias por la información. – Dominic