将文件保存到已安装的内部存储器并从PC下载

时间:2015-09-11 21:37:19

标签: android file internal-storage

我有一个可以生成大输出文件的应用。我将它们保存到"下载"内部存储的文件夹,我想从"下载"我的电脑上安装的手机存储的文件夹。

我正在使用的代码包含:

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

的形式安装在我的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

所以文件权限是相同的,但为什么我从PC上看不到我的output.txt文件?

PS。是否有更好的替代方法可以在不使用adb备份的情况下将应用程序生成的文件检索到PC中?

1 个答案:

答案 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系统上修改后如何更新已编入索引的文件的元数据。