Java 如何将文件写入Android中的外部公共存储,以便在Windows中可以看到这些文件?

Java 如何将文件写入Android中的外部公共存储,以便在Windows中可以看到这些文件?,java,android,Java,Android,我的应用程序应该将文件保存到一个地方,当您将手机/平板电脑连接到计算机时,您可以通过系统文件资源管理器查看这些文件 这是我实现文件写入的方式: protected String mDir = Environment.DIRECTORY_DOCUMENTS; protected File mPath = Environment.getExternalStoragePublicDirectory(mDir); protected void writeLogFile(String filename)

我的应用程序应该将文件保存到一个地方,当您将手机/平板电脑连接到计算机时,您可以通过系统文件资源管理器查看这些文件

这是我实现文件写入的方式:

protected String mDir = Environment.DIRECTORY_DOCUMENTS;
protected File mPath = Environment.getExternalStoragePublicDirectory(mDir);

protected void writeLogFile(String filename) {
    File f = new File(mPath, filename + ".txt");
    f.getParentFile().mkdirs();
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(f, false))) {

        // Details omitted.

    } catch (Exception e) {
        e.printStackTrace();
        return;
    }
    makeText("Wrote " + f.getAbsolutePath());
}
这是我将我的Sony Xperia Z4平板电脑连接到Windows时看到的(注意缺少的文档文件夹):

这是文件写入的目录(使用上述实现):

我的实现有什么问题

我的实现有什么问题

MediaStore
尚未发现您新创建的文件。您在Windows和许多设备上的“多媒体资料”应用程序中看到的是基于
MediaStore
索引的内容

将数据写入磁盘后,使用
MediaScannerConnection
及其
scanFile()
方法告诉
MediaStore
有关文件的信息:

public void scanFile(Context ctxt, File f, String mimeType) {
    MediaScannerConnection
        .scanFile(ctxt, new String[] {f.getAbsolutePath()},
                  new String[] {mimeType}, null);
}
或者,在科特林:

fun scanFile(ctxt: Context, f: File, mimeType: String) {
  MediaScannerConnection.scanFile(ctxt, arrayOf(f.getAbsolutePath()), arrayOf(mimeType), null)
}

谢谢,这很有效。我真的认为他们应该把这些信息包括在报告中。我认为MediaStore最终会自己找到这些文件?@transporter\u room\u 3:是的。Googlebot有一个小版本,它定期扫描外部存储,并在重新启动时更新
MediaStore
文件列表。文件最终会显示出来。