inputStream.available()
może odpowiadać rozmiarowi pliku, jeśli plik jest bardzo mały, ale w przypadku większych plików nie jest zgodny.
W przypadku skompresowanego zasobu jedynym sposobem uzyskania niezawodnie rozmiaru jest skopiowanie go do systemu plików, np. context.getCacheDir()
, a następnie odczytanie z niego długości pliku. Oto przykładowy kod, który to robi. Prawdopodobnie wtedy również sensowne jest używanie pliku z katalogu pamięci podręcznej, w przeciwieństwie do zasobów po tym.
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();
Należy również usunąć plik z pamięci podręcznej reż kiedy jesteś z nim zrobić (i cały cache dir zostanie również automatycznie usuwane podczas odinstalowywania aplikacji).
prosimy o trochę więcej wysiłku w zadawaniu pytań. Spróbuj przeczytać FAQ http://stackoverflow.com/faq, aby uzyskać więcej informacji na temat zadawania pytań. – Janusz
OK, dziękuję za informacje. – Dominic