2011-05-25 49 views
0

我试图将文件保存到内部存储(不是SD卡)。正如文件指出的那样,如果我使用getExternalStorageDirectory(),数据将被置于/Android/data/<package_name>/之下,但这里没有任何内容。此代码取自here。不过,类似的代码在Archos上工作。在HTC Desire上的内部存储

File path = Environment.getExternalStorageDirectory(); 
File file = new File(path, "DemoPicture.jpg"); 
txtList.append(file.getPath()); 

try { 
    path.mkdirs(); 
    InputStream is = getResources().openRawResource(R.drawable.icon); 
    OutputStream os = new FileOutputStream(file); 
    byte[] data = new byte[is.available()]; 
    is.read(data); 
    os.write(data); 
    is.close(); 
    os.close(); 
} catch (IOException e) { 
    Log.d("ExternalStorage", "Error writing " + file, e); 
} 

我使用Android SDK 2.1。清单中已经添加了许可WRITE_EXTERNAL_STORAGE。 logcat没有错误。任何提示?

回答

0

忘记更新。 当我拔下设备并运行应用程序时,问题就会消失。一位朋友告诉我,他遇到了同样的问题,并通过关闭任何可能访问SD卡的应用程序来解决问题,例如Windows资源管理器。

1

你在混淆内部和外部存储。你说的是内部存储,而实际上使用的是外部存储:

File path = Environment.getExternalStorageDirectory(); 

产生的文件将在这里位于:/mnt/sdcard/DemoPicture.jpg。但是如果你真的想要使用内部存储,请看看Context.openFileOutput函数。


编辑:

文件路径= Environment.getExternalStorageDirectory(); File file = new File(path,“DemoPicture.jpg”); txtList.append(file.getPath());

try { 
    path.mkdirs(); 
    InputStream is = getResources().openRawResource(R.drawable.icon); 
    OutputStream os = new FileOutputStream(file); 
    byte[] data = new byte[is.available()]; 
    is.read(data); 
    os.write(data); 
    is.close(); 
    os.close(); 
} catch (IOException e) { 
    Toast.makeText(this, "Failed to write a file", Toast.LENGTH_LONG).show(); 
} 
+0

啊,对不起。我的意思是,外部存储。是的,路径显示为'/ mnt/sdcard/DemoPicture.jpg',但我在那里看不到任何东西。我想念什么? – springrolls 2011-05-25 19:52:25

+0

嗯,在我的手机上工作。你如何检查该文件是否被创建?你使用一些文件浏览器应用程序?或者'adb shell'? – inazaruk 2011-05-25 20:03:02

+0

我使用文件资源管理器。我检查了存储状态,并说“共享” - >介质未安装,并通过USB大容量存储器共享。我不明白“安装”是什么意思。当我将设备连接到PC时,我认为它已被安装。 – springrolls 2011-05-25 20:14:35