Java openrawsource()问题
我在Java openrawsource()问题,java,android,Java,Android,我在res/raw/文件夹中有一个数据库文件。我正在调用Resources.openRawResource(),文件名为R.raw.FileName,我得到一个输入流,但我在设备中有另一个数据库文件,因此要将该数据库的内容复制到我使用的设备数据库中: BufferedInputStream bi = new BufferedInputStream(is); 和FileOutputStream,但我得到一个异常,即数据库文件已损坏。我怎样才能继续? 我尝试使用file和FileInputStr
res/raw/
文件夹中有一个数据库文件。我正在调用Resources.openRawResource()
,文件名为R.raw.FileName
,我得到一个输入流,但我在设备中有另一个数据库文件,因此要将该数据库的内容复制到我使用的设备数据库中:
BufferedInputStream bi = new BufferedInputStream(is);
和FileOutputStream,但我得到一个异常,即数据库文件已损坏。我怎样才能继续?
我尝试使用
file
和FileInputStream
读取文件,路径为/res/raw/fileName
,但这也不起作用。是的,您应该能够使用openrawsource
将二进制文件从原始资源文件夹复制到设备
基于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();
您的文件副本现在应该存在于缓冲区中
,因此您可以使用文件输出流
将缓冲区保存到新文件中
FileOutputStream fos = new FileOutputStream("mycopy.db");
fos.write(buffer);
fos.close();
InputStream.available具有严重的限制,不应用于确定可用于流式传输的内容的长度 (): “[…]返回在不阻止更多输入的情况下可以读取或跳过的估计字节数。[…]请注意,此方法提供的保证太弱,在实践中不是很有用。” 您有3种解决方案:
是否有人遇到了与我使用openFileInput方法相同的问题,但它检查的是设备路径而不是项目路径……嗨,这现在仍然有效吗?@elect自API中删除了保证后,我仍然会在实践中避免使用该方法。好的,关于3),为什么可能会返回未知的
?