MongoDB工具类:java操作对文件的增删查改

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79199871 前言   1.MongoDB,是一个基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富、最像关系数据库的,它的特点是高性能、易部署、易使用,存储数据非常方便。
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79199871

前言

  1.MongoDB,是一个基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富、最像关系数据库的,它的特点是高性能、易部署、易使用,存储数据非常方便。在实际的项目操作中,我们不仅能用来存储各种复杂的数据类型,而且在存储文件方面的性能也尤为方便;
  2.那么,本片博客则不去关注MongoDB的database、collection和document等数据类型存储方面,将侧重于MongoDB的文件存储;
  3.以下是总结的一些较为简洁实用的MongoDB的增删查该的方法:

实例

import java.io.File;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;
/*
 * mongoDB文件增删查工具类
 * @author hqc
 *
 */
public class PhotoMongoDBUtils {

    private static String MONGODB_IP = "192.168.1.1";

    private static int MONGODB_PORT = 27017;

    private static String MONGODB_DB = "filedb";


    /**
     * 存储文件,返回mongodb的图片访问路径
     * @param filename 文件名
     * @param file 文件
     * @throws Exception
     */
    public static String saveFile(String filename,File file) throws Exception {

        // 连接服务器
        Mongo mongo = new Mongo(MONGODB_IP, MONGODB_PORT);
        // 连接数据库
        DB db = mongo.getDB(MONGODB_DB);
        // 文件操作是在DB的基础上实现的,与表和文档没有关系
        GridFS gridFS = null;
        gridFS = new GridFS(db);
        GridFSInputFile mongofile = gridFS.createFile(file);
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        String datetime = DateUtils.formatDate(new Date(), "yyyyMMddHHmmss");
        String fileName = datetime +"_"+ filename;
        // 可以再添加属性
        mongofile.put("uuid", uuid);
        mongofile.put("filename",fileName);
        mongofile.put("time",DateUtils.getDateTime());
        // 保存
        mongofile.save();
        String fileUrlPath = "http://"+MONGODB_IP+"/"+MONGODB_DB+"/"+fileName;
        System.out.println("图片访问路径:"+fileUrlPath);
        return fileUrlPath;
    }

    /**
     * 读文件,读到磁盘上
     */
    public static void readFile() throws Exception {
        // 链接服务器
        Mongo mongo = new Mongo();
        // 连接数据库
        DB db = mongo.getDB(MONGODB_DB);
        GridFS gridFs = null;
        gridFs = new GridFS(db);
        // 查找条件
        DBObject query = new BasicDBObject();
        // 查询的结果:
        List<GridFSDBFile> listfiles = gridFs.find(query);
        GridFSDBFile gridDBFile = listfiles.get(0);

        // 获得其中的文件名
        // 注意 : 不是fs中的表的列名,而是根据调试gridDBFile中的属性而来
        String fileName = (String) gridDBFile.get("filename");
        System.out.println("从Mongodb获得文件名为:" + fileName);
        File writeFile = new File("d:/" + fileName);
        if (!writeFile.exists()) {
            writeFile.createNewFile();
        }
        // 把数据写入磁盘中
        //gridDBFile.writeTo("d:/a.txt");
        // 写入文件中
        gridDBFile.writeTo(writeFile);
    }

    /**
     * 存储文件
     */
    public String saveFileToMongo(String mondb_ip,int mondb_port,String mongodb_db,String uploadLoclPath,String fuuid,Map<String,String> map) throws Exception {    
        // 连接服务器
        Mongo mongo = new Mongo(mondb_ip, mondb_port);
        // 连接数据库
        DB db = mongo.getDB(mongodb_db);
        System.out.println(mongo+":"+db);

        // 文件操作是在DB的基础上实现的,与表和文档没有关系
        GridFS gridFS = null;
        gridFS = new GridFS(db);
        File readFile = new File(uploadLoclPath);   
        GridFSInputFile mongofile = gridFS.createFile(readFile);
        //获取原文件名
        String oldFilename = uploadLoclPath.substring(uploadLoclPath.lastIndexOf("\\")+1, uploadLoclPath.length());

        // 可以再添加属性
        mongofile.put("filename",fuuid + "-" + oldFilename);//组合新的文件名存储文件
        mongofile.put("name",map.get("name").toString());
        mongofile.put("time",DateUtils.getDateTime());
        // 保存
        mongofile.save();
        return "";
    }

    /**
     * 根据文件名,查询获取文件
     */
    public boolean findFileByFilename(String mondb_ip,int mondb_port,String mongodb_db,String filename) throws Exception{
        boolean flag = false;
        Mongo mongo = new Mongo(mondb_ip, mondb_port);
        DB db = mongo.getDB(mongodb_db);
        GridFS fs =new GridFS(db);
        List<GridFSDBFile> list = fs.find(filename);
        if(list.size()>0)
            flag = true;
        return flag;
    }

    /**
     * 根据文件名删除文件
     */ 
    public static void delFileByFilename(String filename) throws Exception{
        Mongo mongo = new Mongo(MONGODB_IP, MONGODB_PORT);
        DB db = mongo.getDB(MONGODB_DB);
        GridFS fs =new GridFS(db);
        fs.remove(filename);
    }

    /**
     * 查询出一个db数据库里面的所有文件
     */
    public static List<GridFSDBFile> query(String mondb_ip,int mondb_port,String mongodb_db,DBObject query) throws Exception{
        Mongo mongo = new Mongo(mondb_ip, mondb_port);
        DB db = mongo.getDB(mongodb_db);
        GridFS fs =new GridFS(db);
        List<GridFSDBFile> files = fs.find(query);
        return files;
    }

    /**
     * 根据查询条件删除对应文件
     */
    public static void delFileByDBObject(String mondb_ip,int mondb_port,String mongodb_db,DBObject query) throws Exception{
        Mongo mongo = new Mongo(mondb_ip, mondb_port);
        DB db = mongo.getDB(mongodb_db);
        GridFS fs =new GridFS(db);
        fs.remove(query);
    }

    /**
     * 删除对应db的所有文件
     */ 
    public static void delAllFile(String mondb_ip,int mondb_port,String mongodb_db) throws Exception{
        Mongo mongo = new Mongo(mondb_ip, mondb_port);
        DB db = mongo.getDB(mongodb_db);
        GridFS fs =new GridFS(db);
        DBObject query = new BasicDBObject();
        List<GridFSDBFile> findList = fs.find(query);
        System.out.println(findList.size());
        //删除全部
        for (GridFSDBFile gridFSDBFile : findList) {
            System.out.println(gridFSDBFile);
            fs.remove(gridFSDBFile);
        }
    }

    /**
     * main方法测试
     */     
    public static void main(String[] args) throws Exception {
        //删除
        String filename1 = "20170112102054-fire.jpg";
        delFileByFilename(filename1);
        //删除所有
        delAllFile(MONGODB_IP,MONGODB_PORT,MONGODB_DB);
}

总结

   1.MongoDB作为菲关系型数据库中的一种最像关系型数据库的数据库,很多人都比较喜欢用它结合关系型数据库,以此来达到项目实践的最优效果;
   2.实践出真知,每种方法都是一些小的工具类,有需要的可以直接复制这些方法,然后实用main方法逐一去测试;
   3.方法都是经过实践的,都是一些基础的方法,程序猿可根据自己的项目需求去不断深化这些方法,封装形成对自己比较有效的MongoDB工具类;

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
1月前
|
Java
有关Java发送邮件信息(支持附件、html文件模板发送)
有关Java发送邮件信息(支持附件、html文件模板发送)
31 1
|
1月前
|
Java
java中替换文件内容
java中替换文件内容
14 1
|
1月前
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
22 1
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
1月前
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
Mybatis+mysql动态分页查询数据案例——工具类(MybatisUtil.java)
15 1
|
2天前
|
数据采集 前端开发 测试技术
《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
【4月更文挑战第23天】本文介绍了网页中的滑动验证码的实现原理和自动化测试方法。作者首先提到了网站的反爬虫机制,并表示在本地创建一个没有该机制的网页,然后使用谷歌浏览器进行验证。接着,文章详细讲解了如何使用WebElement的click()方法以及Action类提供的API来模拟鼠标的各种操作,如右击、双击、悬停和拖动。
6 2
|
3天前
|
Web App开发 数据采集 Java
《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
【4月更文挑战第22天】本文介绍了在测试过程中可能会用到的两个功能:Actions类中的拖拽操作和划取字段操作。拖拽操作包括基本讲解、项目实战、代码设计和参考代码,涉及到鼠标按住元素并将其拖动到另一个元素上或指定位置。划取字段操作则介绍了如何在一段文字中随机选取一部分,包括项目实战、代码设计和参考代码。此外,文章还提到了滑动验证的实现,并提供了相关的代码示例。
31 2
|
3天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
8天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
24天前
|
缓存 NoSQL 关系型数据库
【MongoDB】MongoDB更新操作时是否立刻fsync到磁盘?
【4月更文挑战第2天】【MongoDB】MongoDB更新操作时是否立刻fsync到磁盘?