Сохранение файлов на внешнем хранилище на Nexus 7 и получение с ПК
Для моего проекта я хочу иметь возможность сохранять данные датчиков в файл и иметь доступ к ним с ПК для дальнейшего анализа. Это код, который у меня есть, и он успешно работает:
File root = Environment.getExternalStorageDirectory();
File csvfile = new File(root, "Sensor_Data.csv");
FileWriter writer = new FileWriter(csvfile, true);
writer.append("Time");
writer.append(',');
writer.append("Position");
writer.append('\n');
Number data[] = new Number[4000];
for (int i = 0; i<4000; i+=2){
posHistory.toArray(data);
writer.append(String.valueOf(data[i]));
writer.append(',');
writer.append(String.valueOf(data[i+1]));
writer.append('\n');
}
writer.flush();
writer.close();
Проблема в том, что у Nexus 7 на самом деле нет внешнего хранилища (я считаю, что он использует своего рода эмулятор, чтобы быть совместимым с большинством приложений, которые используют внешнее хранилище в своем коде).
После запуска этого кода с помощью диспетчера файлов Astro на устройстве я вижу файл «Sensor_Data.csv» в четырех местах: / sdcard, / storage / sdcard0, / storage / emulated / 0 и / storage / emulated / legacy. И каждый из них я могу открыть изнутри устройства, используя texteditor или documentviewer, и все данные там.
Проблема в том, что когда я подключаю Nexus 7 к ПК, я вижу только «Внутреннее хранилище», которое при открытии показывает мне только содержимое виртуальной SD-карты, но не фактическое внутреннее хранилище, но файл .csv отсутствует. Существует дополнительный каталог «storage / emulated / legacy», но там тоже ничего нет, и нет папок «sdcard0» или «0». Когда я захожу в «Environment.getExternalStorageDirectory (). GetAbsolutePath ()», чтобы точно узнать, какой путь я получаю / storage / emulated / 0
Я попытался сохранить файл в другом месте во внутреннем хранилище, но безуспешно, но я бы предпочел сохранить его во «внешнем хранилище», чтобы приложение было совместимо с большинством устройств, использующих внешнее хранилище.
ОБНОВИТЬ Итак, после использования adb pull имя файла вот результаты:
adb pull /storage/emulated/0/Sensor_Data.csv
remote object '/storage/emulated/0/Sensor_Data.csv' does not exist
adb pull /storage/emulated/legacy/Sensor_Data.csv
243 Kb/s <1495 bytes in 0.006s>
adb pull /storage/sdcard0/Sensor_Data.csv
243 Kb/s <1495 bytes in 0.006s>
adb pull /sdcard/Sensor_Data.csv
243 Kb/s <1495 bytes in 0.006s>
Таким образом, единственное местоположение, которое не работает, это /storage/emulated/0/Sensor_Data.csv, хотя Astro видит его во всех четырех, а LogCat показывает, что оно сохраняется в / storage / emulated / 0 /
Также попытался сохранить в
root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
Я снова вижу его в Astro в тех же четырех местах, но когда я прохожу через Windows Explorer и перехожу в папку загрузок, его там нет.