【问题标题】:File does exists when calling .exists() but can't find it later调用 .exists() 时文件确实存在,但以后找不到
【发布时间】:2013-09-03 13:15:58
【问题描述】:

我正在尝试创建一个文件,该文件最终将包含这样的图片 (EXTRA_OUTPUT):

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                      Environment.DIRECTORY_PICTURES), "scouthouse");
            if(!mediaStorageDir.exists()) {
                mediaStorageDir.mkdirs();
            }

            SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
            String format = s.format(new Date());
            File file = new File(mediaStorageDir.getPath() + File.separator + format + ".jpg");
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }

mediaStorageDir.exists() 返回 true,但我在 windows 中找不到该文件夹​​。位置是 sdcard0/Pictures/scouthouse/。我确实有一个 Pictures/ 文件夹,但 Android 不会创建 /scouthouse/ 文件夹。 当我尝试使用 Bitmapfactory 解码文件时,它返回 null。

编辑!

所以我稍微简化了方法以深入到根,基本上有这个:

   private void createDir() {
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "scouthouse");
    if(!file.mkdirs()) {
        Log.d("file", "file not created");
    }   
}

这会创建一个文件目录,并且第一次不会记录日志。所以目录已经创建,但是 我在手机文件系统的任何地方都找不到它。

    private File createNewFile() {
    File file = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "scouthouse" + File.separator + "test.jpg");
    try {
        if(file.createNewFile()) {
            Log.d("file", "yiss");
            return file;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}

此方法返回 null。无法创建文件..

【问题讨论】:

  • 可能是该文件处于隐藏模式尝试将其重命名为其他名称..
  • 好吧尝试不同的静态名称“test.jpg”。我现在可以得出结论,该文件没有被创建..
  • .createNewFile() 方法返回 false,但我似乎不明白为什么..
  • 你的清单有写权限吗?
  • 是的。我有读写权限。

标签: android file bitmap directory bitmapfactory


【解决方案1】:

mediaStorageDir.exists() 返回 true,但我在 windows 中找不到文件夹。

这可能是因为MediaStore 不知道该目录,因此与 Windows 的 MTP 连接不知道该目录。您可以尝试使用MediaScannerConnectionscanFile() 来解决这个问题,尽管我只对文件而不是目录进行了尝试。此外,即使在建立索引之后,您也可能需要从资源管理器窗口执行“刷新”,或者断开/重新连接设备,因为 Windows 可能会缓存 MTP 结果,并且即使 Android 知道它也不会检测到更改。

【讨论】:

  • 我已重新连接设备,但目录未显示。如何让 MediaStore 了解该目录?
  • @TimKranen:正如我在回答中指出的那样,您可以尝试使用MediaScannerConnectionscanFile() 来解决这个问题,尽管我只对文件而不是目录进行了尝试。
  • 我刚刚检查了设备本身,您是对的,该目录正在设备上创建,但在 Windows 中没有显示。现在显然也创建了文件,但我无法打开它们。尽管如此,.createNewFile() 调用返回 false..
  • @TimKranen:如果“显然也创建了文件”,那么createNewFile() 应该返回false
  • public boolean createNewFile() -> 如果创建文件返回true,如果文件已经存在则返回false。
猜你喜欢
  • 1970-01-01
  • 2017-04-02
  • 2023-03-02
  • 2017-10-19
  • 2016-03-08
  • 1970-01-01
  • 2012-10-05
  • 2013-05-20
  • 2015-04-14
相关资源
最近更新 更多