我目前正试图想出一种将媒体文件写入内部/外部存储(主存储)的方法。要保存的文件可以是从几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();
答案 0 :(得分:1)
首先,不要将其转换为字符串,只需将getExternalStorageDirectory()
用作File
:
File sd = Environment.getExternalStorageDirectory();
File file = new File(sd, FILENAME);
我不知道这是否会纠正,但尝试这样做并不会有什么坏处。在使用file.createNewFile()
写入文件之前,您无需致电FileOutputStream
。关于FileOutputStream
的文档说:
将字节写入文件的输出流。如果是输出文件 存在,可以替换或附加。如果它不存在,则为新的 文件将被创建。
哪一行代码是FileNotFoundException
正在发生?
答案 1 :(得分:1)
您是否将此文件放在SD卡的特定目录中?外部存储?
我认为你的清单中的权限是好的,因为'不会提出'权限被拒绝'所以如果你把文件放在一个特定的文件夹中,这个文件没有被创建,你应该调用文件中的mkdirs()函数! / p>