MongoDB 取出文件遇到异常
来源:互联网 发布:僵尸网络的主要特征是 编辑:程序博客网 时间:2024/05/23 11:52
#pre
前些天终于把文件塞进mongoDB里边了,然后开始考虑拉取
#代码好像没什么不对的
public static void test1() { GridFS gfs=new GridFS(new DB(new MongoClient(),"listentome")); DBCursor cur=gfs.getFileList(); int num=0; while(cur.hasNext()) { GridFSDBFile dbf=(GridFSDBFile)cur.next(); try { dbf.writeTo("E:/"+(num++)+".mp3"); } catch (IOException e) { e.printStackTrace(); } }}
#然而异常来了
Exception in thread "main" java.lang.IllegalStateException: No GridFS instance defined!
at com.mongodb.gridfs.GridFSDBFile.getChunk(GridFSDBFile.java:95)
at com.mongodb.gridfs.GridFSDBFile.writeTo(GridFSDBFile.java:88)
at com.mongodb.gridfs.GridFSDBFile.writeTo(GridFSDBFile.java:70)
at com.mongodb.gridfs.GridFSDBFile.writeTo(GridFSDBFile.java:56)
at com.listentome.DB.Operations.IDB.test1(IDB.java:112)
at com.listentome.DB.Operations.IDB.main(IDB.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
at com.mongodb.gridfs.GridFSDBFile.getChunk(GridFSDBFile.java:95)
at com.mongodb.gridfs.GridFSDBFile.writeTo(GridFSDBFile.java:88)
at com.mongodb.gridfs.GridFSDBFile.writeTo(GridFSDBFile.java:70)
at com.mongodb.gridfs.GridFSDBFile.writeTo(GridFSDBFile.java:56)
at com.listentome.DB.Operations.IDB.test1(IDB.java:112)
at com.listentome.DB.Operations.IDB.main(IDB.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
百度无果(←_←,反正我没找着,去官方文档看了看,然而并没有发现什么)
看问题是说:在调用GridFSDBFile的writeTo方法时发现没有定义GridFS 的实例从而抛出异常
啊喂我这是从GridFS 里边取出来的= =
#看GridFSDBFile对应源码
private byte[] getChunk(int chunkNumber) { if(this.fs == null) { throw new IllegalStateException("No GridFS instance defined!"); } else { DBObject chunk = this.fs.getChunksCollection().findOne((new BasicDBObject("files_id", this.id)).append("n", Integer.valueOf(chunkNumber))); if(chunk == null) { throw new MongoException("Can\'t find a chunk! file id: " + this.id + " chunk: " + chunkNumber); } else { return (byte[])((byte[])chunk.get("data")); } }}
也就是说GridFSDBFile有一个内部的成员变量是fs,值是null
然而它是私有的(private),外部访问不到,所以不能通过setGridFS来解决
然而它是私有的(private),外部访问不到,所以不能通过setGridFS来解决
于是源码看到这里没路了←_←
#后来换了个方法,成功取出文件
public static void test2() { GridFS gfs=new GridFS(new DB(new MongoClient(),"listentome")); List<GridFSDBFile> list=gfs.find(new BasicDBObject()); //new BasicDBObject()是作为query部分传值 // 比如new BasicDBObject("name","K.")
try { int num=0; for(GridFSDBFile dbf :list) dbf.writeTo("E:/" + (num++) + ".mp3"); } catch (IOException e) { e.printStackTrace(); }}
#想了想
第一种方法是通过DBcursor获取到的GridFSDBFile,应该是在强转的时候把fs丢了←_←
第二种方法是直接获取到一个list<GridFSDBFile>,嗯,这是两者的区别
在mongodb数据库中,通过GridFS存入的文件是保存在两个地方:fs.files和fs.chunks
第一种方法获得的GridFSDBFile将无法读取chunks的内容←_←
第二种方法获得的GridFSDBFile却可以
第一种方法是通过DBcursor获取到的GridFSDBFile,应该是在强转的时候把fs丢了←_←
第二种方法是直接获取到一个list<GridFSDBFile>,嗯,这是两者的区别
在mongodb数据库中,通过GridFS存入的文件是保存在两个地方:fs.files和fs.chunks
第一种方法获得的GridFSDBFile将无法读取chunks的内容←_←
第二种方法获得的GridFSDBFile却可以
0 0
- MongoDB 取出文件遇到异常
- MongoDB异常
- java-MongoDB存入文件时奇怪的异常
- jtds 取出数据异常 不能取出text数据
- 安装MongoDB遇到问题
- mongodb时间不同步异常
- mongodb的CursorNotFound异常
- spring同时集成redis和mongodb时遇到多个资源文件加载的问题
- spring同时集成redis和mongodb时遇到多个资源文件加载的问题
- 为什么mongodb异常关闭后,再启动需要删除mongd.lock文件
- mongodb异常关闭后,再启动需要删除mongod.lock文件
- CBCGPTabWnd 遇到一个异常
- ssh 遇到的异常
- 常遇到的异常
- 遇到的各种异常
- java遇到的异常
- 遇到的异常
- python 遇到的异常
- 错误分析iOS功能说明
- Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法
- 黑马程序员-(高新技术)注释
- 把jquery中获取的数组保存到html的data-XX中
- 人不成熟的五大特征--看看你有几项?
- MongoDB 取出文件遇到异常
- HelloWorld 大全
- Android应用程序UI硬件加速渲染技术简要介绍和学习计划
- HDOJ 1233 还是畅通工程
- Jedis连接池配置
- Unity+NGUI性能优化方法总结
- PRML-系列一之1.2.1
- HTTPS是如何保证连接安全
- 发布不显示jqueryUi控件