Java 使用Androids DownloadManager从包裹文件描述符返回输入流

Java 使用Androids DownloadManager从包裹文件描述符返回输入流,java,android,Java,Android,我正在尝试使用android DownloadManager下载一个文件,访问该文件,并将其写入一个新位置(在本例中,我正在下载一个数据库,该数据库在服务器端编译,需要写入/database/目录) 我一直在读,并设法下载了文件,并激活了广播接收器,但在这一点上我卡住了 我已返回了ParcelFileDecriptor文件,但在以任何方式将其转换为流时遇到问题。我无法确定ParcelFileDecriptor.AutoCloseInputStream是否是一条红鲱鱼,但我非常确定ParcelFi

我正在尝试使用android DownloadManager下载一个文件,访问该文件,并将其写入一个新位置(在本例中,我正在下载一个数据库,该数据库在服务器端编译,需要写入/database/目录)

我一直在读,并设法下载了文件,并激活了广播接收器,但在这一点上我卡住了


我已返回了ParcelFileDecriptor文件,但在以任何方式将其转换为流时遇到问题。我无法确定ParcelFileDecriptor.AutoCloseInputStream是否是一条红鲱鱼,但我非常确定ParcelFileDecriptor与流具有相关性,但我确实在努力解决它。任何帮助都将不胜感激。

我在发帖后大约5分钟就解决了这个问题,现在觉得自己相当愚蠢。无论如何,假设您已经开始下载并设置了广播接收器,下面的代码将完成这项工作

            ParcelFileDescriptor file = dMgr.openDownloadedFile(downloadId);
            File dbFile = getDatabasePath(Roads.DATABASE_NAME);

            InputStream fileStream = new FileInputStream(file.getFileDescriptor());
            OutputStream newDatabase = new FileOutputStream(dbFile);

            byte[] buffer = new byte[1024];
            int length;

            while((length = fileStream.read(buffer)) > 0)
            {
                newDatabase.write(buffer, 0, length);
            }

            newDatabase.flush();
            fileStream.close();
            newDatabase.close();
如果您正在查找有关用自己的数据库覆盖数据库的更多信息,请检查此链接(也是上述大部分信息的来源):


您可以考虑使用<代码> com .谷歌.Cudio.Io.ByTeFiels.Simin(In,out) HyoRION,谢谢输入。实际上,我已经很多年没有做过任何android开发了。如果使用bytestreams copy现在是移动流的首选方式(这是有意义的),请随时分别更新/编辑帖子。=)这是谷歌提供的一个图书馆,我觉得它非常有用。在为Android开发复杂的应用程序时,我总是依赖它,所以向其他人提及它可能会让他们的生活更轻松。