将文件保存到安装的内部存储器中并从 PC 下载
Saving a file into mounted internal storage and downloading it from PC
我有一个生成大输出文件的应用程序。我将它们保存到内部存储的 "Download" 文件夹中,我想从我的 PC 上安装的 phone 存储的 "Download" 文件夹中检索它们。
我使用的代码包含:
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();
phone 是 Oneplus2 并且文件夹作为 Computer\ONE A2001\Internal storage\Download
安装在我的 Windows 7 上
从 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
所以文件权限是一样的,但是为什么我在电脑上看不到我的output.txt
文件呢?
PS。有没有更好的替代方法可以在不使用 adb backup 的情况下将应用程序生成的文件检索到 PC 中?
好吧,显然文件在创建后需要由媒体扫描器编制索引,以便可以访问。
如 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 系统上修改后更新已索引文件的元数据。
我有一个生成大输出文件的应用程序。我将它们保存到内部存储的 "Download" 文件夹中,我想从我的 PC 上安装的 phone 存储的 "Download" 文件夹中检索它们。
我使用的代码包含:
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();
phone 是 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
所以文件权限是一样的,但是为什么我在电脑上看不到我的output.txt
文件呢?
PS。有没有更好的替代方法可以在不使用 adb backup 的情况下将应用程序生成的文件检索到 PC 中?
好吧,显然文件在创建后需要由媒体扫描器编制索引,以便可以访问。
如 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 系统上修改后更新已索引文件的元数据。