Tworzenie plików tymczasowych w systemie Android

Jaki jest najlepszy sposób na utworzenie pliku tymczasowego w Androidzie?

Może Plik.createTempFile być używane? Dokumentacja jest bardzo niejasna.

W szczególności, nie jest jasne, kiedy Pliki tymczasowe utworzone za pomocą File.createTempFile są usuwane, jeśli w ogóle.

Author: hpique, 2010-08-06

5 answers

To jest to, co zwykle robię:

File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);
Co do ich usunięcia, też nie jestem do końca pewien. Ponieważ używam tego w mojej implementacji pamięci podręcznej, ręcznie usuwam najstarsze pliki, aż rozmiar katalogu pamięci podręcznej spadnie do mojej wstępnie ustawionej wartości.
 242
Author: sparkymat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-26 18:22:00

Najlepsze praktyki w plikach tymczasowychwewnętrznych izewnętrznych:

Wewnętrzna Pamięć Podręczna

Jeśli chcesz buforować niektóre dane, a nie przechowywać je wytrwale, należy użyć getCacheDir(), aby otworzyć plik, który reprezentuje wewnętrzny katalog, w którym aplikacja powinna zapisać tymczasową pamięć podręczną pliki.

Gdy urządzenie ma mało miejsca na pamięci wewnętrznej, Android może usunąć te pliki pamięci podręcznej, aby odzyskać miejsce. Należy jednak nie polegaj na system do czyszczenia tych plików dla Ciebie. Należy zawsze utrzymywać pliki pamięci podręcznej samodzielnie i pozostań w rozsądnym limicie miejsca zużyte, np. 1MB. Kiedy użytkownik odinstaluje aplikację, te pliki są usuwane.

Zewnętrzna Pamięć Podręczna

Aby otworzyć plik reprezentujący zewnętrzny katalog pamięci, w którym powinieneś zapisać pliki pamięci podręcznej, zadzwoń getExternalCacheDir(). Jeśli użytkownik odinstalowuje Twoją aplikację, pliki te będą automatycznie usunięte.

Podobne do ContextCompat.getExternalFilesDirs(), wymienione powyżej, można również uzyskać dostęp do katalogu pamięci podręcznej na dodatkowej pamięci zewnętrznej (jeśli jest dostępny) przez wywołanie ContextCompat.getExternalCacheDirs().

Wskazówka: Aby zachować przestrzeń plików i utrzymać wydajność aplikacji, to ważne, aby starannie zarządzać plikami pamięci podręcznej i usuwać je które nie są już potrzebne w całym cyklu życia aplikacji.

 85
Author: mibollma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-11 16:21:52

Dla tymczasowych plików wewnętrznych są 2 opcje

1.

File file; 
file = File.createTempFile(filename, null, this.getCacheDir());

2.

File file
file = new File(this.getCacheDir(), filename);

Obie opcje dodają pliki w katalogu cache aplikacji i w ten sposób mogą zostać wyczyszczone, aby zrobić miejsce w razie potrzeby, ale opcja 1 doda losową liczbę na końcu nazwy pliku, aby pliki były unikalne. Będzie również dodać rozszerzenie pliku, które jest .tmp domyślnie, ale może być ustawiony na cokolwiek za pomocą 2nd parametr. Użycie liczby losowej oznacza, że pomimo podania nazwy pliku to nie pozostaje taka sama, ponieważ liczba jest dodawana wraz z przyrostkiem/rozszerzeniem pliku (.tmp domyślnie) np. podajesz nazwę pliku jako internal_file i wychodzi jako internal_file1456345.tmp. Podczas gdy możesz określić rozszerzenie, nie możesz podać dodanego numeru. Możesz jednak znaleźć nazwę pliku, który generuje za pomocą file.getName();, ale musisz ją gdzieś przechowywać, aby móc jej używać, kiedy tylko chcesz, na przykład usunąć lub odczytać plik. Dlatego z tego powodu wolę opcję 2nd jako nazwę pliku you określ jest nazwą pliku, który zostanie utworzony.

 26
Author: AdrenalineJunky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-31 05:23:06

Możesz użyć katalogu pamięci podręcznej używając kontekstu .getCacheDir () .

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
 12
Author: Macarse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-23 04:22:48
 0
Author: kotucz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-06 12:45:17