Невозможно увидеть файл в Windows, написанный приложением Android на SD-карте, пока я не "принудительно закрою" приложение - PullRequest
13 голосов
/ 15 сентября 2011

Я написал файл через свою программу для Android следующим образом:

String file = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Files/hello.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(str + "\n");     \\ Yeah, 'str' has a value there
writer.close();

Программа выполняет свою работу и завершает свою работу. Теперь я нажимаю кнопку «Назад» на Android, чтобы закрыть приложение. Если я затем захожу в файловый браузер Android (например, Astro), я вижу файл, но если я монтирую SD-карту в Windows, я не вижу файл!

Теперь, если я зайду на Настройки Приложения Управление приложениями «Force Stop» , I ' я могу видеть файл даже в Windows.

Что я должен сделать, чтобы я мог видеть файл в Windows, если этот файл записан моим приложением для Android на SD-карте, и я не хочу заходить в настройки и каждый раз нажимать принудительно.

На самом деле файл пишется правильно (я думаю), но, поскольку поведение кнопки «Назад» в Android по умолчанию не убивает приложение, и похоже, что если приложение не убито, я не могу открыть файл снаружи Android (в Android я все еще могу его увидеть и даже открыть).

Итак, что было бы лучшим решением для этого случая? Должен ли я автоматически убить приложение, когда оно закрывается? Люди говорят, что System.exit () строго не рекомендуется.

Ответы [ 3 ]

26 голосов
/ 27 сентября 2012

Необходимо использовать следующий код, чтобы ваш архив отображался в файловой системе Windows или в галерее телефона.

У вас есть две возможности:

  1. Это быстрее, потому что Android обновляет только переданный файл:

    MediaScannerConnection.scanFile(this, new String[]{"your path here</"}, null, null);

  2. Это дороже, потому что Android будет искать все файлы по пройденному пути. Вы можете передать только путь к папке, чтобы уменьшить поиск файлов:

    context.sendBroadcast(
        new Intent(Intent.ACTION_MEDIA_MOUNTED, 
                   Uri.parse("file://" + "path of the folder")));
    
0 голосов
/ 05 апреля 2015

Windows 7 действительно имела проблемы с просмотром файлов при подключении через USB-соединение.Обходным решением для меня было использование дистрибутива GNU / Linux.

Используя терминальное приложение, есть разница, где root:root файлы доступны для просмотра в Проводнике, но нет других владельцев.

0 голосов
/ 27 сентября 2012

Поскольку объект BufferedWriter является буфером , необходимо очистить буфер (), чтобы принудительно записать содержимое в выходной поток.

String file = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Files/hello.txt";
BufferedWriter writer = new BufferedWriter(new FileWriter(file));   
writer.write(str+"\n");
writer.flush(); // force the buffer to actually dump its data to the stream
writer.close();

Когда вы .write () используете буфер, всегда помните, что данные будут храниться в буфере до тех пор, пока либо буфер не будет заполнен (а затем автоматически сброшен () ed), либо вы заставите буфер сбрасывать его данные, используя .flush () метод буфера.

Кроме того, причина, по которой файл не был записан правильно, пока вы не принудительно закрыли приложение, заключается в том, что когда вы убиваете приложение, одним из шагов является очистка () всех буферов, связанных с приложением. Вот почему это происходило только тогда, когда вы убили его силой.

Примечание: Имейте в виду, что это поведение по умолчанию для большинства типов буферизованных потоков на многих разных языках.

...