如果我在ASUS Transformer上运行以下代码,则会按预期在'sd card'目录的顶层创建'testfile.txt'。
private void testWriteFile () throws IOException
{
File sdCard = Environment.getExternalStorageDirectory();
File file = new File(sdCard, "testfile.txt");
FileOutputStream myOutput = new FileOutputStream(file);
byte buffer[] = {'0','1','2','3','4','5','6','7','8','9'};
myOutput.write(buffer,0,buffer.length);
myOutput.flush();
myOutput.close();
}
我可以使用文件管理器应用程序查看ASUS Transformer上的文件。我可以通过'adb shell'命令从Windows dos框中看到该文件,并且其权限似乎已正确设置。但是,如果我从Windows资源管理器中查看该目录,则“testfile.txt”不存在。我已经设置了显示隐藏文件和系统文件的选项,但没有运气。
如果我使用ASUS文件管理器应用更改'testfile.txt'的名称,那么它在Windows资源管理器中可见,因此其他应用程序可以在资源管理器中显示文件。
如果我在ZTE Blade(Orange San Francisco)上运行相同的代码,那么我可以在Windows资源管理器中看到'testfile.txt'而无需更改其名称。
我需要做些什么来完成这个文件才能看到它?
此处报告了类似的问题,Can't see a file in Windows written by an android app on sd-card unless I "Force Close" the app,但在我的情况下强行关闭并不会使文件可见。
答案 0 :(得分:5)
我已按照以下说明解决了这个问题:
MediaScannerConnection.scanFile
(this, new String[] {file.toString()}, null, null);
我不确定为什么华硕需要这个,而不是中兴通讯刀片。但是,他们连接到我的电脑的方式有所不同,我怀疑这就是原因。
中兴通讯刀片显示为USB大容量存储设备,并分配了一个驱动器号。华硕作为便携式媒体播放器(MTP)出现,并没有分配驱动器号。
答案 1 :(得分:0)
我在android5.x上有这个工作:
File sdcard = Environment.getExternalStorageDirectory();
//step 1.
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.parse("file://" + sdcard)));
//step 2.
MediaScannerConnection.scanFile(getApplicationContext(),
new String[]{sdcard.getAbsolutePath()
+ "/screenshots/myscreen_" + IMAGES_PRODUCED + ".png"}, null, null);
感谢。