对于我的项目,我希望能够将传感器数据保存到一个文件中,并能够从PC访问它以进行进一步分析。这是我目前拥有的代码,它工作成功:
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/sdcard 0,/storage/emulated/0和/storage/emulated/legacy。而且我可以从设备内部使用texteditor或documentviewer打开它们中的每一个,所有的数据都在那里。
问题是,当我连接Nexus 7到PC,我只看到“内部存储”,当打开时,实际上只显示虚拟SD卡的内容,而不是实际的内部存储,但.csv文件不存在.有一个额外的目录“存储/模拟/传统”,但也没有在那里,也没有“sdcard 0”或“0”文件夹。当我记录“Environment.getExternalStorageDirectory().getAbsolutePath()”以查看路径时,我得到的是/storage/emulated/0
我试过将文件保存在内部存储的其他地方,但没有成功,但我宁愿将其保存在“外部存储”中,以便应用程序与大多数使用外部存储的设备兼容。
***UPDATE***因此,使用adb pull filename后,结果如下:
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);
再次,我可以看到它在阿斯特罗在相同的四个位置,但当我通过Windows资源管理器和导航到下载文件夹它不在那里。
3条答案
按热度按时间vatpfxk51#
你试过使用一个终端,带有“adb pull filename”和Astro看到的完整路径名吗?这应该可以工作,如果你自己使用这个也不会太难。
xsuvu9jc2#
我也遇到过这种情况(在我的Nexus 4上)。这个文件存在于我的手机上(用adb shell找到的),但我笔记本电脑上的文件浏览器找不到这个文件。就像@billtian说的,这似乎是Nexus 4和7设备上的一个bug。我在一台旧的爱立信Xperia上试用了我的代码,在那里我可以通过笔记本电脑找到这个文件。
owfi6suc3#
为什么,最好不要把它发送到您的邮箱。参见以下示例: