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
文件列表。文件最终会显示出来。