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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 版权声明:本文为博主原创文章,如需转载,请标明出处。 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
相关文章
|
29天前
|
Java
Java“解析时到达文件末尾”解决
在Java编程中,“解析时到达文件末尾”通常指在读取或处理文件时提前遇到了文件结尾,导致程序无法继续读取所需数据。解决方法包括:确保文件路径正确,检查文件是否完整,使用正确的文件读取模式(如文本或二进制),以及确保读取位置正确。合理设置缓冲区大小和循环条件也能避免此类问题。
|
8天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
9天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
21 4
|
12天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
12天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
17天前
|
NoSQL Java 数据库连接
MongoDB Java
10月更文挑战第18天
12 3
|
21天前
|
Java
Java开发如何实现文件的移动,但是在移动结束后才进行读取?
【10月更文挑战第13天】Java开发如何实现文件的移动,但是在移动结束后才进行读取?
40 2
|
21天前
|
Java Apache Maven
Java将word文档转换成pdf文件的方法?
【10月更文挑战第13天】Java将word文档转换成pdf文件的方法?
95 1
|
21天前
|
监控 Java
Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
【10月更文挑战第13天】Java定时扫码一个文件夹下的文件,如何保证文件写入完成后才进行处理?
68 1
|
26天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
35 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用