【发布时间】:2014-10-03 12:30:17
【问题描述】:
我想这是一个愚蠢的错误,但我无法控制自己...... 这是我的第一个 Android 应用程序。我正在尝试在模拟的 sd 卡上保存一些数据,以便用户可以轻松检索数据。
这个类应该写一些DataFields到sd卡
private final List<DataField> dataFields;
private final File exportFile;
private DateFormat simpleDate = new SimpleDateFormat("yyyyMMddhhmm");
private CsvExporter(List<DataField> dataFields) {
this.dataFields = dataFields;
exportFile = new File(getTargetFolderPath(), getTargetFileName());
}
private String getTargetFileName() {
return "export_" + (simpleDate.format(new Date())) + ".csv";
}
private File getTargetFolderPath() {
//return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File targetFolder = getExternalFilesDir(null);
if (!targetFolder.exists()){
if (!targetFolder.mkdirs()){
Log.e("CsvWriter","Could not create targetFolder " + targetFolder);
}}
Log.d("CsvWriter","TargetFolder is " + targetFolder);
for (File f: targetFolder.listFiles()){
Log.d("CsvWriter","Found file " + f);
}
return targetFolder;
}
private void initFile() throws IOException {
if (!exportFile.exists()) {
if (!exportFile.createNewFile()){
Log.e("CsvWriter","Could not create targetFile " +exportFile);
}
}
Log.d("CsvWriter","targetFile is " +exportFile);
}
public File doExport() {
try {
initFile();
List<String[]> data = convertToStrings();
writeData(data);
readData();
return exportFile;
} catch (IOException e) {
throw new RuntimeException("Unable to create or write to csv-File", e);
}
}
我正在华硕平板电脑上调试应用程序。到目前为止一切正常。该文件夹是第一次创建的,现在确实存在。该文件已写入,也可以通过编程方式读取。如果我使用 android 设备监视器打开设备,我可以看到文件 /mnt/shell/emulated/0/Android/data/my.package.name/files/。 这完全是意料之中的,我很高兴它运行得如此顺利。 尽管如此,当我在我的电脑上安装 android-device 时,我的文件夹在 /Android/data/my.package.name/files 下不可见
我的 AndroidManifest.xml 中包含 android.permission.WRITE_EXTERNAL_STORAGE
您可以看到我选择下载文件夹作为目标的不同方法。再次,我可以在使用 android 设备监视器 (/shell/emulated/0/Download/) 浏览目录树时看到文件,但在我的电脑上打开设备上的下载文件夹时看不到文件。
我做错了什么? getExternalFilesDir 不应该返回一个通过 USB 可见的文件夹吗?
编辑: 这是我的adm和我的文件浏览器的屏幕截图......
编辑2: 我解决了这个问题。谢谢 :) 固定的doExport():
public File doExport() {
try {
initFile();
List<String[]> data = convertToStrings();
writeData(data);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + getTargetFolderPath())));
//readData();
return exportFile;
} catch (IOException e) {
throw new RuntimeException("Unable to create or write to csv-File", e);
}
}
我强烈推荐阅读this question
【问题讨论】:
-
你的意思是你在你的应用包名下找到数据
-
@adcom:我不明白你的问题..