【问题标题】:Android: getExternalFilesDir - Path is not visible on PCAndroid:getExternalFilesDir - 路径在 PC 上不可见
【发布时间】: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:我不明白你的问题..

标签: android file storage


【解决方案1】:

getExternalFilesDir 不应该返回一个通过 USB 可见的文件夹吗?

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

更多信息,我有a blog post specifically about this situation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2014-03-19
    • 2013-11-11
    • 2013-10-06
    相关资源
    最近更新 更多