我有一个可以生成大输出文件的应用。我将它们保存到"下载"内部存储的文件夹,我想从"下载"我的电脑上安装的手机存储的文件夹。
我正在使用的代码包含:
String filename="output.txt";
File dirname = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
FileWriter outFileWriter;
outFile = new File(dirname, filename);
outFileWriter = new FileWriter(outFile);
outFileWriter.append(outputString);
outFileWriter.close();
手机是Oneplus2,文件夹以Computer\ONE A2001\Internal storage\Download
从adb shell我可以看到并读取文件,但计算机没有看到它。当我从我的计算机将文件复制到已安装的下载文件夹时,我可以从adb shell看到它,所以我知道我正在寻找一个合适的位置,但计算机无法看到我的应用程序的输出文件。
ls -l
给出:
shell@OnePlus2:/storage/sdcard0/Download $ ls -l
ls -l
-rw-rw---- root sdcard_r 2030918 2015-09-11 17:24 copiedFromComputer.jpg
-rw-rw---- root sdcard_r 581632 2015-09-11 17:32 output.txt
所以文件权限是相同的,但为什么我从PC上看不到我的output.txt
文件?
PS。是否有更好的替代方法可以在不使用adb备份的情况下将应用程序生成的文件检索到PC中?
答案 0 :(得分:0)
好吧,显然一个文件在创建后需要由媒体扫描程序编制索引,以便可以访问它。
在http://developer.android.com/reference/android/os/Environment.html中可以在应用中调用:
// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(this,
new String[] { file.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
或
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(outFile)));
或来自adb shell:
shell@shamu:/ $ am broadcast android.intent.action.MEDIA_MOUNTED
但是,如果文件在编制索引后进行了修改,则更改不会反映到其元数据(如文件大小)。但是,如果将其下载到计算机,则会更正大小和其他元数据。
也许有人可以评论在Android系统上修改后如何更新已编入索引的文件的元数据。