我在res/raw/文件夹中有一个数据库文件。我正在使用文件名Resources.openRawResource()调用R.raw.FileName,并得到输入流,但是设备中还有另一个数据库文件,因此要将该数据库的内容复制到设备数据库中,我将使用:

 BufferedInputStream bi = new BufferedInputStream(is);

和FileOutputStream,但是我得到一个异常,即数据库文件已损坏。我该如何进行?
我尝试使用FileFileInputStream和路径作为/res/raw/fileName读取文件,但这也不起作用。

最佳答案

是的,您应该能够使用openRawResource将二进制文件从原始资源文件夹复制到设备。

基于API演示中的示例代码(content/ReadAsset),您应该能够使用以下代码段的变体来读取db文件数据。

InputStream ins = getResources().openRawResource(R.raw.my_db_file);
ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
int size = 0;
// Read the entire resource into a local byte buffer.
byte[] buffer = new byte[1024];
while((size=ins.read(buffer,0,1024))>=0){
  outputStream.write(buffer,0,size);
}
ins.close();
buffer=outputStream.toByteArray();

现在,文件副本应存在buffer中,因此您可以使用FileOutputStream将缓冲区保存到新文件中。
FileOutputStream fos = new FileOutputStream("mycopy.db");
fos.write(buffer);
fos.close();

关于java - Android的Resources.openRawResource()问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/939170/

10-12 06:19