2011-01-19 14 views
42

Proste pytanie dotyczące domyślnego katalogu "domowego", gdy aplikacja zapisuje w pamięci wewnętrznej. Domyślnie wszystkie pliki tworzone są umieszczane przez OS (2.2) w:Android Uzyskaj katalog danych aplikacji "domowy"

/data/data/your.package/files 

Podczas odczytu w plikach, ten sam domyślny jest używany, gdy utrzymanie w odpowiednim kontekście poprzez openFileInput(), openFileOutput(). Ale jeśli potrzebuję sprawdzić istnienie pliku, na przykład przy użyciu klasy File, muszę podać całą ścieżkę w konstruktorze.

widzę istnieją Environment.getDataDirectory() (zwraca /data) Environment.getRootDirectory() (zwraca /system), etc, ale nie związane z coraz katalogu 'Home' w aplikacji.

To nie jest wielka sprawa, ale wolałbym nie zakodować na sztywno pełnej ścieżki do mojej aplikacji dla pliku do użycia (powiedzmy, że nazwa pakietu zmienia się, powiedzmy, że ścieżka zmienia się w przyszłym wydaniu systemu operacyjnego), jeśli jest jakiś sposób programowo odwoływać się do katalogu "domowego" aplikacji.

+0

związane http://stackoverflow.com/questions/5527764/get-application-directory –

Odpowiedz

84

Oczywiście, nigdy nie zawiedzie. Znaleziono rozwiązanie około minutę po zaksięgowaniu wyżej pytanie ... rozwiązanie dla tych, które mogą mieć ten sam problem:

ContextWrapper.getFilesDir() 

znaleźć here.

+8

ta zwraca '/ data/data//files', ale jak uzyskać ścieżkę z "plików z tego"? – Prizoff

+7

@Prizoff Użyj Context.getApplicationInfo(). DataDir, zgodnie z [odpowiedź Kevina poniżej] (http://stackoverflow.com/a/12792520/80425) –

+0

szukasz tego: -http: //stackoverflow.com/ pytania/5527764/get-application-directory –

33

Możesz spróbować Context.getApplicationInfo().dataDir , jeśli chcesz mieć stały folder danych pakietu.

getFilesDir() zwraca podfolder tego.

+0

To powraca "/ data/user/0/" w moim Google Nexus 6, który jest nieprawidłowym folderem. –

13

Aby uzyskać ścieżkę pliku w pakiecie aplikacji;

ContextWrapper c = new ContextWrapper(this); 
Toast.makeText(this, c.getFilesDir().getPath(), Toast.LENGTH_LONG).show(); 
Powiązane problemy