Android:getExternalFilesDir - 在PC上看不到路径

时间:2014-08-10 15:57:31

标签: android file storage

我想这是一个愚蠢的错误,但我在这里无法自拔...... 这是我的第一个Android应用程序。我正在尝试在模拟的SD卡上保存一些数据,以便用户可以轻松检索数据。

这个类应该将一些DataField写入sd-card

    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应该返回一个可见的文件夹?

编辑: 这是我的adm和我的文件浏览器的截图... Screenshot if my adm and my filebrowser.

EDIT2: 我解决了这个问题。谢谢 :) 固定的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

1 个答案:

答案 0 :(得分:4)

  

Isnt getExternalFilesDir应该返回一个可见的文件夹吗?

是的,但只有在文件夹中的文件被MediaStore编入索引之后。您可以使用MediaScannerConnection and scanFile()请求对其编制索引。

有关详细信息,我有a blog post specifically about this situation