将媒体文件写入内部/外部存储

时间:2012-01-11 19:13:53

标签: android file-io android-4.0-ice-cream-sandwich

我目前正试图想出一种将媒体文件写入内部/外部存储(主存储)的方法。要保存的文件可以是从几MB到50MB的任何大小。我的逻辑适用于我的Droid X 2.3.3 Razr 2.3.5(我相信),但不适用于我的Galaxy Nexus(没有可移动存储,但内置16Gig卡与v4.0.2)。我环顾四周,没有发现任何适用于v4.0的代码/示例。也许我接近这一切都错了,因为它没有真正的SD卡?也许它是v4.0中的新东西?目前,当我在Galaxy Nexus上运行我的应用程序时,我得到了: System.err(19520):java.io.FileNotFoundException:

已更新

InputStream inputStream = urlConnection.getInputStream(); 
File PATH = Environment.getExternalStorageDirectory(); 
File FILE = new File(Environment.getExternalStorageDirectory()+ "/" + FILENAME); 
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 
// buffer int bufferSize = 1024; int bufferLength = 0; byte[] buffer = new byte[bufferSize]; 
while ((bufferLength = inputStream.read(buffer)) != -1) { 
byteBuffer.write(buffer, 0, bufferLength); 
} 
byte[] temp = byteBuffer.toByteArray(); 
FileOutputStream fos = new FileOutputStream(FILE); 
fos.write(temp); 
fos.close();

2 个答案:

答案 0 :(得分:1)

首先,不要将其转换为字符串,只需将getExternalStorageDirectory()用作File

File sd = Environment.getExternalStorageDirectory();
File file = new File(sd, FILENAME);

我不知道这是否会纠正,但尝试这样做并不会有什么坏处。在使用file.createNewFile()写入文件之前,您无需致电FileOutputStream。关于FileOutputStream的文档说:

  

将字节写入文件的输出流。如果是输出文件   存在,可以替换或附加。如果它不存在,则为新的   文件将被创建。

哪一行代码是FileNotFoundException正在发生?

答案 1 :(得分:1)

您是否将此文件放在SD卡的特定目录中?外部存储?

我认为你的清单中的权限是好的,因为'不会提出'权限被拒绝'所以如果你把文件放在一个特定的文件夹中,这个文件没有被创建,你应该调用文件中的mkdirs()函数! / p>