Как работать с файлами в Android

Аватар пользователя Михайлов Александр
Опубликовано вт, 12/13/2011 - 14:39 пользователем Михайлов Александр

 

Итак, сегодня я бы хотел рассказать вам о правильной работе с файлами в ОС Android.  Чаще всего у новичков возникают ситуации, когда обычные Java функции не могут корректно создать тот или иной файл в системе Android.

Во-первых, вам нужно обратить внимание на интересную особенность операционной системы: когда вы устанавливаете apk приложение в эмулятор или телефон, система Linux, выделяет ему специальный User-ID, который является неким ключом доступа к (sandbox). То есть другие приложения в телефоне не смогут получить доступ к чтению файлов вашего приложения просто так. Кончено, всё это сделано в целях безопасности.

В общем, вот правильно составленный код:

 

FileWriter f = new FileWriter("impossible.txt");

 

То этот код вызовет исключение: ‘java.io.FileNotFoundException: /impossible.txt ‘
Тогда как должен в случае отсутствия файла создать его.

 

Далее стоит отметить, что данное ограничение не распространяется на файлы, записываемые на SDCard. Туда можно писать любые файлы без всяких проблем, правда предварительно нужно добавить в AndroidManifest разрешение на запись:

 

Код файла на карту:

 

File fileName = null;

String sdState = android.os.Environment.getExternalStorageState();

if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) {

    File sdDir = android.os.Environment.getExternalStorageDirectory();

    fileName = new File(sdDir, "cache/primer.txt");

    } else {

        fileName = context.getCacheDir();

    }

if (!fileName.exists())

    fileName.mkdirs();

try {

    FileWriter f = new FileWriter(fileName);

    f.write("hello world");

    f.flush();

    f.close();

} catch (Exception e) {

 

}

 

Как уже ранее было сказано мною, android приложение находится в некой песочнице, изолированной от воздействия со стороны других приложений по умолчанию. Для того, чтобы создать файл внутри этой песочницы, следует использовать функцию openFileOutput(). Хочу отметить 2 аргумента:

1. имя файла
2. режим доступа к нему со стороны чужих приложений

С первым аргументом все ясно, что касается второго, то режимов существует два: MODE_WORLD_READABLE и/или MODE_WORLD_WRITEABLE.

И ещё, чтобы записать файл можно использовать следующий код:

final String TESTSTRING = new String("Hello Android");

FileOutputStream fOut = openFileOutput("samplefile.txt", MODE_WORLD_READABLE);

OutputStreamWriter osw = new OutputStreamWriter(fOut);

// записываем строку в файл

osw.write(TESTSTRING);

/* проверяем, что все действительно записалось и закрываем файл */

osw.flush();

osw.close();

 

Для чтения файлов используется метод openFileInput():

 

FileInputStream fIn = openFileInput("samplefile.txt");

InputStreamReader isr = new InputStreamReader(fIn);

char[] inputBuffer = new char[TESTSTRING.length()];

isr.read(inputBuffer);

String readString = new String(inputBuffer);

Партнёр

Сейчас на сайте

Пользователей онлайн: 0.