遍历文件夹下txt类型文件,并读取文件内容,使用QxOrm上传至Oracle数据库

我是BigPangaea,一个毕业两年多的行业小白;
由于各项能力均不精通,就写一些工作当中的练习记录下来,以备后续所需;
根据项目需求,要实现监听文件夹内文件实时更新数据库的功能;

  1. 遍历文件夹内“.txt”类型的文件
//遍历文件夹内所有文件
void Savedatabase::tranverseFolder(QString path)
{
    QDir dir(path); //判断路径是否存在

    if(!dir.exists())
    {
        QMessageBox::warning(
                    this,
                    "Whether the path exists ",
                    "Path doesn't exist");
        return;
    }

    dir.setFilter(QDir::Files | QDir::NoSymLinks);

    QFileInfoList list = dir.entryInfoList();

    int file_count = list.count();

    if(file_count <= 0)
    {
        QMessageBox::warning(
                    this,
                    "Whether the folder is empty",
                    "Folder is empty");
        return;
    }

    QStringList filelist;

    for(int i = 0; i < file_count; i++)
    {
        QFileInfo file_info = list.at(i);
        QString suffix = file_info.suffix();

        if(QString::compare(suffix, QString("txt"), Qt::CaseInsensitive) == 0)
        {
            QString absolute_file_path = file_info.absoluteFilePath();

            filelist.append(absolute_file_path);
        }
    }

    QDateTime curDateTime = QDateTime::currentDateTime();

    QStringList newlist = checkFile(currentfilelist, filelist);

    if(newlist.isEmpty())
    {
//        qDebug() << "No new files";
        return;
    }
    currentfilelist.clear();

    for(int i = 0; i < filelist.count(); i ++)
    {
        currentfilelist.append(filelist[i]);
        readFile(filelist[i]);
    }

    for(int i = 0; i < newlist.count(); i ++)
    {
//        qDebug() << curDateTime.toString("yyyy-MM-dd hh:mm:ss : ") + newlist[i];
        readFile(newlist[i]);
    }
}
  1. 读取文件内容

//读取文件内容
void Savedatabase::readFile(QString filename)
{
    QFile file(filename);

    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream in(&file);

//        qDebug() << in.readLine();
        textContent.clear();

        while(!in.atEnd())
        {
            textContent.append(in.readLine());
        }

        qDebug() << textContent;
    }
    file.close();
    saveDataToDatabase();
}

  1. 比较文件夹内的文件是否发生变化,发生变化后返回变化后的结果集
//比较文件夹内的文件是否发生变化,发生变化返回变化后的结果
QStringList Savedatabase::checkFile(QStringList& commonColumns, QStringList& currentcolumns)
{
    QStringList newlist;

    //判断两个QStringList是否为空
    if(commonColumns.count() == 0 || currentcolumns.count() == 0)
    {
        if(commonColumns.count() == 0 && currentcolumns.count() != 0)
        {
            return currentcolumns;
        }

        else if(currentcolumns.count() == 0 && commonColumns.count() != 0)
        {
            return commonColumns;
        }

        else
        {
            return newlist;
        }
    }

    commonColumns.sort();
    currentcolumns.sort();

    int count1 = commonColumns.count();
    int count2 = currentcolumns.count();

    int x = 0; int y = 0;
    int flag = 0;
    if(count1 < count2)
    {
        for(int i = x; i < count2; i ++)
        {
            for(int j = y; j < count1; j ++)
            {
                if(QString::compare(commonColumns[j], currentcolumns[i]) == 0)
                {
                    flag = 1;

                    break;
                }
            }
            if(! flag)
            {
                newlist.append(currentcolumns[i]);
            }

            flag = 0;
        }
    }

    else
    {
        for(int i = x; i < count1; i ++)
        {
            for(int j = y; j < count2; j ++)
            {
                if(QString::compare(commonColumns[i], currentcolumns[j]) == 0)
                {
                    flag = 1;

                    break;
                }
            }

            if(! flag)
            {
                newlist.append(commonColumns[i]);
            }

            flag = 0;
        }
    }

    return newlist;
}

  1. 在数据库中添加数据

void Savedatabase::saveDataToDatabase()
{
    QxSqlDatabase::getSingleton()->setDriverName("QOCI");
    QxSqlDatabase::getSingleton()->setDatabaseName("orcl");
    QxSqlDatabase::getSingleton()->setHostName("localhost");
    QxSqlDatabase::getSingleton()->setUserName("HR");
    QxSqlDatabase::getSingleton()->setPassword("123456");
    QxSqlDatabase::getSingleton()->setPort(1521);

    Member member;

    member.name = textContent.at(0);
    member.phone = textContent.at(1);
    member.gender = textContent.at(2);
    member.age = textContent.at(3).toInt();

    QSqlDatabase dataBase =  QxSqlDatabase::getDatabase();
    dataBase.transaction();

    qx::dao::insert(member, &dataBase);

    dataBase.commit();
}


注释:
功能介绍:根据设置好的文件夹,每3秒自动遍历文件夹下所有的txt文件;并且读取文件内容保存至oracle数据库中;

未实现功能:
1.目前只添加了读取txt文件,后续可添加读取其他类型的文本文件;
2.目前只有遍历文件后添加数据库数据,没有删除功能,后续可添加;
3.目前遍历文件夹下文件列表对比时,只保留修改的内容,意思是:如果文件夹内添加一个新文件时,会在数据库内添加数据,但是在删除一个文件时,也会在数据库内添加数据,不会进行删除,该功能需要后续完善QStringList对比函数;
4.读取文件内容后,添加到对应的数据库中;该功能未开发;
//已添加功能:添加数据到数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值