Android: сохранить файл для загрузок, которые можно будет просмотреть позже

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

Мой код в настоящее время выглядит так:

private void saveData(byte[] data){
    File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    File file = new File(path, "_Ascent_Test.txt");        
    try {                      
        FileOutputStream stream = new FileOutputStream(file, true);             
        stream.write(data);            
        stream.close();
        Log.i("saveData", "Data Saved");        
    } catch (IOException e) {
        Log.e("SAVE DATA", "Could not write file " + e.getMessage());
    }       
}

Он правильно попадает в журнал «Сохраненные данные» без каких-либо ошибок, но я не могу найти файл нигде во внутренней памяти устройства, когда просматриваю его со своего компьютера.

Что мне не хватает?

Спасибо.

Изменить: мне нужно запустить это на Nexus 7


person Chuck Finley    schedule 29.01.2013    source источник
comment
Вы пытались напечатать абсолютный путь (developer.android.com/ reference/java/io/) из вашей переменной file, а затем попытались перейти туда, используя adb shell?   -  person Daniel Smith    schedule 30.01.2013
comment
Вы добавили ‹uses-permission android:name=android.permission.WRITE_EXTERNAL_STORAGE/› в свой файл манифеста?   -  person ottel142    schedule 30.01.2013
comment
Разрешение установлено. Он выдавал ошибку до того, как я ее получил, поэтому я уверен, что эта часть хороша. Кажется, он просто нигде не создает файл.   -  person Chuck Finley    schedule 30.01.2013
comment
как насчет этого абсолютного пути?   -  person Daniel Smith    schedule 30.01.2013
comment
Он возвращает /storage/emulated/0/Download/_Ascent_Test.txt, но я не могу получить доступ к этому местоположению с компьютера. Мне нужно иметь возможность получить файл и открыть его на обычном компьютере, поэтому мне нужно сохранить его где-нибудь, откуда у меня есть права на его получение.   -  person Chuck Finley    schedule 30.01.2013
comment
Вы можете использовать adb pull /mnt/shell/emulated/0/Download/_Ascent_Test.txt для доступа к файлу. Или используйте представление файлов в DDMS в Eclipse.   -  person Wolfram Rittmeyer    schedule 31.01.2013


Ответы (3)


Файлы не видны, если вы явно не сделаете их доступными. См. мой сообщение в блоге о MediaScanner подробнее об этом.

Задача разработчика — позаботиться об этом и убедиться, что все файлы, к которым пользователь может захотеть получить доступ, доступны для MediaScanner.

person Wolfram Rittmeyer    schedule 31.01.2013
comment
Спасибо за это. Это было действительно не очевидно. - person Patrick Mineault; 01.07.2015
comment
Вы сэкономили мне много времени, это должно быть более ясно - person Martin De Simone; 30.09.2017

Я хотел сделать очень похожую вещь. Вот как я заставил его работать, используя ваш код ТОЧНО.

После запуска моего кода для создания файла (/storage/emulated/0/Download/_Ascent_Test.txt):

Я скачал ES File Explorer.

В меню «Быстрый доступ» внизу я включил «Показать скрытые файлы».

Затем также в меню «Быстрый доступ» заходим в локальную -> /Device.

Теперь вы сможете перейти к папке /storage и вплоть до _Ascent_test.txt.

Оттуда вы можете открыть его и отправить по электронной почте самостоятельно. Надеюсь, это помогло!

person user3718453    schedule 14.08.2014

Похоже, это известная проблема с Nexus 4 и 7. У меня до сих пор нет обходного пути, но на данный момент использование Astro File Manager для отправки электронной почты самому себе решит насущную проблему.

Сохранение файлов во внешнем хранилище на Nexus 7 и получение с ПК

Nexus 4 не показывает файлы через MTP

Всегда приятно потратить несколько часов на что-то подобное. Гах!

person Chuck Finley    schedule 29.01.2013