1.本发明涉及数据处理领域,具体而言,涉及一种文件扫描方法、装置、终端设备及存储介质。
背景技术:2.随着智能化终端的普及,以及移动互联网时代的到来,车机终端的智能化已成为车企研发的重点方向。目前,智能车机的功能越来越齐全,人们可以利用车机终端实现听音乐、看视频、玩游戏、导航和聊天等娱乐活动。由于车机终端的存储空间的限制,通常由u盘和移动硬盘等外部存储设备来存储图片、音乐和视频等资源,车机终端连接外部存储设备通过扫描的方式,来获取并使用外部存储设备的资源。
3.车机终端通常搭载安卓(android)系统,android原生的媒体扫描(mediascanner)框架由于其自身的设计问题,在扫描存有较多媒体数据的设备时,扫描的耗时很长。同时,其在移除或者插入一个外部存储设备后,都会对之前所保存的数据库进行检测及清理,因此,每次拔插外部存储设备后,都需要重新对外部存储设备中的文件进行扫描解析。故而,导致在外部存储设备中的媒体文件较多时,车机终端的扫描耗时过长。
技术实现要素:4.有鉴于此,本发明的目的在于提供一种文件扫描方法、装置、电子设备及存储介质,其能够改善目前的终端对外部存储设备进行扫描时,耗时过长的问题。
5.为了实现上述目的,本发明实施例采用的技术方案如下。
6.第一方面,本发明实施例提供一种文件扫描方法,采用如下的技术方案。
7.一种文件扫描方法,应用于终端设备,所述终端设备包括数据库,所述终端设备安装有扫描进程,所述方法包括:
8.在所述扫描进程监听到任一外部存储设备的挂载通知时,对所述外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列;
9.基于历史扫描文件表,将所述文件队列中未扫描的文件作为待扫描文件,其中,所述历史扫描文件表中记录有已扫描文件的文件信息;
10.开启第一线程池,以多线程并行的方式,对所有所述待扫描文件进行扫描,并将扫描出的扫描信息插入至所述数据库;
11.在所有所述待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程所述数据库待访问。
12.进一步地,所述扫描信息包括媒体文件信息,所述对所有所述待扫描文件进行扫描的步骤,包括:
13.根据所述待扫描文件的文件类型,判断所述待扫描文件是否为媒体文件,若是,则将所述待扫描文件加入至解析队列;
14.开启第二线程池,以多线程并行的方式,对所述解析队列中的文件进行解析,将解
析成功的文件的媒体文件信息更新至所述数据库的媒体表中。
15.进一步地,所述对所述解析队列中的文件进行解析的步骤,包括:
16.提取所述解析队列中的文件的元数据信息,若提取失败,则该文件解析失败,否则,该文件解析成功;
17.所述元数据信息包括专辑、时长、标题和作曲家中的任几种。
18.进一步地,在所述判断所述待扫描文件是否为媒体文件的步骤之后,所述方法还包括:
19.若否,则结束所述待扫描文件的扫描流程;
20.所述对所有所述待扫描文件进行扫描的步骤,还包括:
21.将所述待扫描文件的文件信息记录至所述历史扫描文件表中。
22.进一步地,所述对所述外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列的步骤,包括:
23.对所述外部存储设备的一级文件目录进行遍历,将满足有效条件的文件加入至文件队列,将满足有效条件的文件夹加入至文件夹队列;
24.按照目录递归遍历的方式,将所述文件夹队列的各文件夹中满足有效条件的文件加入至文件队列,将满足有效条件的文件夹加入至文件夹队列,直至遍历完所有的文件夹。
25.进一步地,在所述在所述扫描进程监听到任一外部存储设备的挂载通知时,对所述外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列的步骤之前,所述方法还包括:
26.在所述扫描进程初次启动时,创建所述数据库,并确定唯一约束包括文件信息,所述文件信息包括文件路径、文件名、文件类型、文件大小和文件修改时间;
27.在所述终端设备的系统开机时,启动所述扫描进程。
28.进一步地,所述基于历史扫描文件表,将所述文件队列中未扫描的文件作为待扫描文件的步骤,包括:
29.针对所述文件队列中的每个文件,判断所述历史扫描文件表中是否存在与该文件的唯一约束字段一致的内容,若否,则确定该文件为未扫描文件,以将该文件作为待扫描文件。
30.第二方面,本发明实施例提供一种文件扫描装置,采用如下的技术方案。
31.一种文件扫描装置,应用于终端设备,所述终端设备包括数据库,所述终端设备安装有扫描进程,所述文件扫描装置包括遍历模块、扫描模块和广播模块;
32.所述遍历模块,用于在所述扫描进程监听到任一外部存储设备的挂载通知时,对所述外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列;
33.所述扫描模块,用于基于历史扫描文件表,将所述文件队列中未扫描的文件作为待扫描文件,其中,所述历史扫描文件表中记录有已扫描文件的文件信息;还用于开启第一线程池,以多线程并行的方式,对所有所述待扫描文件进行扫描,并将扫描出的扫描信息插入至所述数据库;
34.所述广播模块,用于在所有所述待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程所述数据库待访问。
35.第三方面,本发明实施例提供一种终端设备,采用如下的技术方案。
36.一种终端设备,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机程序,所述处理器可执行所述计算机程序以实现如第一方面所述的文件扫描方法。
37.第四方面,本发明实施例提供一种存储介质,采用如下的技术方案。
38.一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的文件扫描方法。
39.本发明实施例提供的文件扫描方法、装置、终端设备及存储介质,终端设备上的扫描进程监听到外部存储设备的挂载通知时,将外部存储设备上的有效文件加入至文件队列,从而确定出文件队列中历史上未扫描过的待扫描文件,进而开启第一线程池只对待扫描文件进行扫描,能够避免重复扫描,且多线程并行扫描,能够大幅减少扫描的时耗。
40.为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
41.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
42.图1示出了本发明实施例提供的文件扫描系统的方框示意图。
43.图2示出了本发明实施例提供的文件扫描方法的流程示意图之一。
44.图3示出了本发明实施例提供的文件扫描方法的流程示意图之二。
45.图4示出了图2或图3中步骤s102的部分子步骤的流程示意图。
46.图5示出了图2或图3中步骤s106的部分子步骤的物流示意图。
47.图6示出了本发明实施例提供的文件扫描装置的方框示意图。
48.图7示出了奔赴马实施例提供的终端设备的方框示意图。
49.图标:110-文件扫描系统;120-终端设备;130-外部存储设备;140-文件扫描装置;150-遍历模块;160-扫描模块;170-广播模块。
具体实施方式
50.下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
51.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
52.需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且
还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
53.目前,智能车机的功能越来越齐全,人们可以利用车机终端实现听音乐、看视频、玩游戏、导航和聊天等娱乐活动。由于车机终端的存储空间的限制,通常由u盘和移动硬盘等外部存储设备130来存储图片、音乐和视频等资源,车机终端连接外部存储设备130通过扫描的方式,来获取并使用外部存储设备130的资源。
54.车机终端通常搭载安卓(android)系统,android原生的媒体扫描(mediascanner)框架由于其自身的设计问题,在扫描存有较多媒体数据的设备时,扫描的耗时很长。同时,其在移除或者插入一个外部存储设备(例如u盘)后,都会对之前所保存的数据库进行检测及清理。因此,搭载安卓系统的终端设备会存在一种现象:用户每次拔插外部存储设备后,都需要重新对外部存储设备中的文件进行扫描解析。
55.当外部存储设备中的媒体文件等存储量大的文件较多时,终端设备需要耗费大量的时间才能完成对外部存储设备的扫描解析,耗时甚至可以达到几十分钟以上。并且,在终端设备对外部存储设备进行扫描的过程中,用户难以及时访问到需求的文件。同时,由于扫描解析会长时间占用较高的cpu和内存使用率,因此,终端设备容易因cpu及内存不足而出现系统卡顿等问题。
56.有鉴于此,本发明实施例提供一种文件扫描方案,其能够改善目前的终端设备120对外部存储设备130进行扫描解析时,耗时过长的问题。以下,将从文件扫描方法等角度进行介绍。
57.本发明实施例提供的文件扫描方法,可以应用于如图1所示的环境中,该文件扫描系统110包括终端设备120和至少一个外部存储设备130,终端设备120包括数据库,且终端设备120上安装有扫描进程,终端设备120搭载有安卓系统。当扫描进程监听到外部存储设备130挂载在终端设备120上时,终端设备120将外部存储设备130的有效文件加入至文件队列,进而确定出文件队列中未扫描过的待扫描文件,并开启第一线程池对待扫描文件进行扫描。
58.其中,可以将扫描前的预处理、扫描、解析及数据库的操作等相关工作全部放入扫描进程的native层。外部存储设备130包括但不限于是u盘和移动硬盘。
59.在一个实施例,参照图2,本发明提供了一种文件扫描方法,本实施例以该文件扫描方法应用于图1中的终端设备120进行举例说明。
60.s102,在扫描进程监听到任一外部存储设备的挂载通知时,对外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列。
61.故而,文件队列包括多个有效的文件。其中,有效条件包括文件格式标准。应当理解的是,文件格式标准指的是各类文件的格式符合所属类型的格式标准。例如,“f:\2022-03\xxxxx.docx”是个有效的文件,“:\2022-03\xxxxx.docx”是无效的文件。
62.以及,当将扫描前的预处理、扫描、解析和数据库相关操作都放入扫描进程的native层时,扫描进程监听到外部存储设备130的挂载通知时,发送请求至native层,以触发进行:对外部存储设备130的文件目录进行遍历,将满足有效条件的文件加入至文件队列。
63.s104,基于历史扫描文件表,将文件队列中未扫描的文件作为待扫描文件。
64.其中,历史扫描文件表中记录有已扫描文件的文件信息。
65.s106,开启第一线程池,以多线程并行的方式,对所有待扫描文件进行扫描,并将扫描出的扫描信息插入至数据库。
66.需要说明的是,步骤s104和s106也可以并行进行,即当确定出待扫描文件后,可以一边执行s106对待扫描文件进行扫描,同时可以执行s104继续确定待扫描文件。
67.s108,在所有待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程数据库待访问。
68.其他进程包括但不限于是读写进程和存储进程等。
69.应当理解的是,步骤s104至s108的执行过程属于扫描进程的内容。
70.为了便于更好地理解本发明提供的上述文件扫描方法,下面对原理进行介绍。
71.安卓系统原生的扫描进程(mediascanner),在用户每次拔插外部存储设备130后,都会重新对外部存储设备130中的文件进行扫描解析,导致扫描耗时较长。
72.而本实施例提供的文件扫描方法,终端设备120上的扫描进程监听到外部存储设备130的挂载通知时,将外部存储设备130上的有效文件加入至文件队列,从而确定出文件队列中历史上未扫描过的待扫描文件,进而开启第一线程池只对待扫描文件进行扫描,能够避免对同一文件或同一外部存储设备130的多次重复扫描,且多线程并行扫描,能够大幅减少扫描的时耗。
73.故而,用户在终端设备120(例如,车机终端)上插入外部存储设备130(如u盘)等外设后,终端设备120在很短的时间内,便可访问到所需文件。特别是当重新拔插一个含有大量数据的外部存储设备130后,使用本实施例提供的文件扫描方法,几乎可节省出全新扫描该外部存储设备130一次所需要的时耗。
74.可以使用c++语言完成:将扫描前的预处理、扫描、解析和数据库操作等相关工作全部移入至扫描进程的native层。通过扫描进程中上述native层的操作,在提高扫描效率的同时,在一定程度上可以避免大量的app与native层的jni数据通信,从而降低数据的通信时长和系统的资源消耗。
75.进一步,参照图3,本实施例提供的文件扫描方法还可以包括步骤s100和s101,s100和s101。
76.s100,在扫描进程初次启动时,创建数据库,并确定唯一约束包括文件信息。
77.其中,文件信息包括文件路径、文件名、文件类型、文件大小和文件修改时间。
78.扫描进程在终端设备120上初次启动时,终端设备120创建数据库,该数据库用于后续记录扫描进程扫描到的扫描信息,并供其他进程访问。以及,确定唯一约束(unique约束),以便于s104确定出待扫描文件。
79.s101,在终端设备的系统开机时,启动扫描进程。
80.需要说明的是,终端设备120的系统包括但不限于是安卓系统、linux系统和windows系统。
81.终端设备120的系统开机时,会进行开机广播,在终端设备120进行开机广播时,扫描进程启动,启动后的扫描能够进行监听,以能够进行步骤s102。
82.需要说明的是,可以灵活选择任一种方式实现s102中的对外部存储设备130的文
件目录进行遍历,将满足有效条件的文件加入至文件队列。例如,也可以将一级目录中的每个文件夹一次性遍历至最低级目录;也可以先遍历完一级目录的所有文件夹及文件目标之后,再遍历二级目录的所有文件夹及文件目录,直至遍历完所有的文件即文件夹目录。
83.为了快速确定出所有满足有效条件的文件,在一种实施方式中,参照图4,可以通过以下步骤实现s102中的对外部存储设备130的文件目录进行遍历,将满足有效条件的文件加入至文件队列。
84.s201,对外部存储设备的一级文件目录进行遍历,将满足有效条件的文件加入至文件队列,将满足有效条件的文件夹加入至文件夹队列。
85.s202,按照目录递归遍历的方式,将文件夹队列的各文件夹中满足有效条件的文件加入至文件队列,将满足有效条件的文件夹加入至文件夹队列,直至遍历完所有的文件夹。
86.s202的实质是,对文件夹队里中的每个文件夹,均进行:对文件夹中的所有一级文件夹目录进行遍历,将文件夹中满足有效条件的文件加入至文件队列,将文件夹中满足有效条件的子文件夹加入至文件夹队列,且每遍历完一个文件夹,就将该文件夹从文件夹队里中删除,直至文件夹队列中不再存在文件夹。
87.通过上述步骤s201和s202,可以将无效文件从扫描中剔除,减少需扫描量,进一步提高扫描解析速度,减少时耗。同时,通过上述步骤s201和s202,能够遍历到每个文件及文件夹,避免遍历遗漏文件或文件夹。
88.历史扫描文件表中记录有历史上已进行扫描的文件的文件信息,文件信息包括文件路径、文件名、文件类型、文件大小和文件修改时间,即历史扫描文件表中的文件信息与唯一约束的字段数量和字段类型相同。
89.为了便于理解s104,接下来提供一种实施方式,上述步骤s104可以通过以下方式实现:针对文件队列中的每个文件,判断历史扫描文件表中是否存在与该文件的唯一约束字段一致的内容,若否,则确定该文件为未扫描文件,以将该文件作为待扫描文件。
90.基于唯一约束,提取出文件队列中的每个文件的唯一约束字段,若历史扫描文件表中存在与该唯一约束字段完全一致的内容,则说明这个文件已经被扫描过,反之,则这个文件未被扫描过,属于待扫描文件。
91.针对步骤s106,可以根据实际访问需求,选择合适的方式对所有待扫描文件进行扫描,即对所有待扫描文件进行扫描的方式可以灵活选择。
92.在一种实施方式中,当需求的扫描信息包括媒体文件信息时,参照图5,步骤s106可以通过以下步骤对所有待扫描文件进行扫描。
93.s301,根据待扫描文件的文件类型,判断待扫描文件是否为媒体文件。若是,则执行步骤s302。
94.需要说明的是,媒体文件的文件类型包括但不限于是音频、视频、图片和动图。
95.例如,当待扫描文件的文件类型为音频、视频或图片时,待扫描文件就为媒体文件。
96.s302,将待扫描文件加入至解析队列。
97.将是媒体文件的待扫描文件加入到解析队列中,解析队里中的所有文件都是媒体文件。
98.s303,开启第二线程池,以多线程并行的方式,对解析队列中的文件进行解析,将解析成功的文件的媒体文件信息更新至数据库的媒体表中。
99.其中,第二线程池中的线程数是技术人员根据经验值和测试结果,确定出的值。
100.在本实施方式中,可以通过sqlite开源代码将接卸成功的文件的媒体文件信息更新/插入到媒体表中。
101.以多线程的方式,同时并行对解析队列中的多个文件进行解析,直至接卸队列中的所有文件解析完成。并且,当任一文件解析成功时,将该文件的媒体文件信息更新至媒体表中。其他进程可以根据媒体表中的媒体文件信息,对媒体文件进行访问。
102.应当理解的是,历史扫描文件表和媒体表都可以存储于数据库内。
103.进一步地,请继续参照图5,步骤s106还包括子步骤s304和s305,在s301中若确定出待扫描文件不是媒体文件,则执行步骤s304,s305可以在s304和s303之后执行,也可以在s301之前执行。
104.s304,结束待扫描文件的扫描流程。
105.若待扫描文件不是媒体文件,则不需要进行后续的解析。
106.s305,将待扫描文件的文件信息记录至历史扫描文件表中。
107.将本次扫描的待扫描文件的文件信息记录至历史扫描文件表中,能够避免之后重复扫描该文件,从而能够降低扫描时耗。
108.针对上述步骤s303,对解析队列中的文件进行解析的方式可以灵活选择,例如,可以按照预设的规则进行解析,也可以采用机器学习进行解析。
109.在一种实施方式中,可以通过以下方式实现对解析队列中的文件进行解析:提取解析队列中的文件的元数据信息,若提取失败,则该文件解析失败,否则,该文件解析成功。
110.其中,元数据信息包括但不限于是专辑、时长、标题和作曲家中的任一种或任几种。
111.在本实施方式中,可以使用ffmpeg开源框架中的avformatcontext对象来提取媒体文件的元数据信息。应当理解的是,这种提取方式仅仅是一种举例,而不是提取方式的唯一限定。
112.在车机终端安卓系统原生的扫描进程中,当判断出挂载路径为u盘时,不再对u盘中的文件进行扫描流程。而在本实施例提供的文件扫描方法中,可以将扫描进程配置为:将要扫描的外部存储路径(即待扫描文件的路径)限制为终端设备120自带的存储路径。以此,能够屏蔽对外部存储设备130的扫描。
113.进一步地,本发明实施例提供的文件扫描方法还可以包括:当扫描进程监听到外部存储设备130的拔除广播或回调后,停止对外部存储设备130的扫描工作。
114.本发明实施例提供的文件扫描方法具有以下优点:
115.(1)首次对一外部存储设备130中的文件进行扫描解析后,会将文件信息保存至历史扫描文件表,在拔除该设备或者插入其他外部存储设备130后,不删除该信息,若数据后续有变动,则直接对已保存的信息进行更新,从而在一定程度上避免对同一外部存储设备130或同一文件进行重复扫描。
116.(2)引入线程池,同时并行多个扫描及解析的线程任务,提高对文件的扫描解析效率。
117.(3)引入ffmpeg开源框架来解析并提取媒体文件的元数据信息,以进一步降低媒体文件元数据的解析时耗。
118.(4)引入sqlite开源代码进行数据库的更新和插入操作,并对扫描进程的native进行配置,在一定程度上可以避免大量的app与native层的jni数据通信,进而降低数据的通信时长与系统的资源消耗。
119.基于与上述文件扫描方法相同的发明构思,在一个实施例中,提供一种文件扫描装置140,应用于终端设备120,终端设备120包括数据库,终端设备120安装有扫描进程,参照图6,文件扫描装置140包括遍历模块150、扫描模块160和广播模块170。
120.遍历模块150,用于在扫描进程监听到任一外部存储设备130的挂载通知时,对外部存储设备130的文件目录进行遍历,将满足有效条件的文件加入至文件队列。
121.扫描模块160,用于基于历史扫描文件表,将文件队列中未扫描的文件作为待扫描文件。
122.其中,历史扫描文件表中记录有已扫描文件的文件信息。
123.扫描模块160,还用于开启第一线程池,以多线程并行的方式,对所有待扫描文件进行扫描,并将扫描出的扫描信息插入至数据库。
124.广播模块170,用于在所有待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程数据库待访问。
125.上述文件扫描装置140,仅对外部存储设备130中历史上未被扫描的文件进行扫描处理,从而能够在一定程度上能够避免同一文件的重复扫描,进而能够提高扫描效率,降低扫描时耗。
126.关于文件扫描装置140的具体限定可以参见上文中对于文件扫描方法的限定,在此不再赘述。上述文件扫描装置140中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于终端设备120中的处理器中,也可以以软件形式存储于终端设备120中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
127.在一个实施例中,提供了一种终端设备120,该终端设备120可以是终端,其内部结构图可以如图7所示。该终端设备120包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该终端设备120的处理器用于提供计算和控制能力。该终端设备120的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该终端设备120的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、近场通信(nfc)或其他技术实现。该计算机程序被处理器执行时以实现一种文件扫描方法。该终端设备120的显示屏可以是液晶显示屏或者电子墨水显示屏,该终端设备120的输入装置可以是显示屏上覆盖的触摸层,也可以是终端设备120外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
128.本领域技术人员可以理解,图7中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的终端设备120的限定,具体的终端设备120可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
129.在一个实施例中,本发明提供的文件扫描装置140可以实现为一种计算机程序的
形式,计算机程序可在如图7所示的终端设备120上运行。终端设备120的存储器中可存储组成该文件扫描装置140的各个程序模块,比如,图6所示的a模块、b模块和c模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本发明各个实施例的文件扫描方法中的步骤。
130.例如,图7所示的终端设备120可以通过如图6所示的文件扫描装置140中的遍历模块150执行步骤s102。终端设备120可通过扫描模块160执行步骤s104和s106。终端设备120可通过广播模块170执行步骤s108。
131.在一个实施例中,提供了一种终端设备120,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现以下步骤:在扫描进程监听到任一外部存储设备130的挂载通知时,对外部存储设备130的文件目录进行遍历,将满足有效条件的文件加入至文件队列;基于历史扫描文件表,将文件队列中未扫描的文件作为待扫描文件,其中,历史扫描文件表中记录有已扫描文件的文件信息;开启第一线程池,以多线程并行的方式,对所有待扫描文件进行扫描,并将扫描出的扫描信息插入至数据库;在所有待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程数据库待访问。
132.在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据待扫描文件的文件类型,判断待扫描文件是否为媒体文件,若是,则将待扫描文件加入至解析队列;开启第二线程池,以多线程并行的方式,对解析队列中的文件进行解析,将解析成功的文件的媒体文件信息更新至数据库的媒体表中。
133.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:在扫描进程监听到任一外部存储设备130的挂载通知时,对外部存储设备130的文件目录进行遍历,将满足有效条件的文件加入至文件队列;基于历史扫描文件表,将文件队列中未扫描的文件作为待扫描文件,其中,历史扫描文件表中记录有已扫描文件的文件信息;开启第一线程池,以多线程并行的方式,对所有待扫描文件进行扫描,并将扫描出的扫描信息插入至数据库;在所有待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程数据库待访问。
134.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据待扫描文件的文件类型,判断待扫描文件是否为媒体文件,若是,则将待扫描文件加入至解析队列;开启第二线程池,以多线程并行的方式,对解析队列中的文件进行解析,将解析成功的文件的媒体文件信息更新至数据库的媒体表中。
135.在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
136.另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
137.所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备120(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
138.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
技术特征:1.一种文件扫描方法,其特征在于,应用于终端设备,所述终端设备包括数据库,所述终端设备安装有扫描进程,所述方法包括:在所述扫描进程监听到任一外部存储设备的挂载通知时,对所述外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列;基于历史扫描文件表,将所述文件队列中未扫描的文件作为待扫描文件,其中,所述历史扫描文件表中记录有已扫描文件的文件信息;开启第一线程池,以多线程并行的方式,对所有所述待扫描文件进行扫描,并将扫描出的扫描信息插入至所述数据库;在所有所述待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程所述数据库待访问。2.根据权利要求1所述的文件扫描方法,其特征在于,所述扫描信息包括媒体文件信息,所述对所有所述待扫描文件进行扫描的步骤,包括:根据所述待扫描文件的文件类型,判断所述待扫描文件是否为媒体文件,若是,则将所述待扫描文件加入至解析队列;开启第二线程池,以多线程并行的方式,对所述解析队列中的文件进行解析,将解析成功的文件的媒体文件信息更新至所述数据库的媒体表中。3.根据权利要求2所述的文件扫描方法,其特征在于,所述对所述解析队列中的文件进行解析的步骤,包括:提取所述解析队列中的文件的元数据信息,若提取失败,则该文件解析失败,否则,该文件解析成功;所述元数据信息包括专辑、时长、标题和作曲家中的任几种。4.根据权利要求2所述的文件扫描方法,其特征在于,在所述判断所述待扫描文件是否为媒体文件的步骤之后,所述方法还包括:若否,则结束所述待扫描文件的扫描流程;所述对所有所述待扫描文件进行扫描的步骤,还包括:将所述待扫描文件的文件信息记录至所述历史扫描文件表中。5.根据权利要求1所述的文件扫描方法,其特征在于,所述对所述外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列的步骤,包括:对所述外部存储设备的一级文件目录进行遍历,将满足有效条件的文件加入至文件队列,将满足有效条件的文件夹加入至文件夹队列;按照目录递归遍历的方式,将所述文件夹队列的各文件夹中满足有效条件的文件加入至文件队列,将满足有效条件的文件夹加入至文件夹队列,直至遍历完所有的文件夹。6.根据权利要求1所述的文件扫描方法,其特征在于,在所述在所述扫描进程监听到任一外部存储设备的挂载通知时,对所述外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列的步骤之前,所述方法还包括:在所述扫描进程初次启动时,创建所述数据库,并确定唯一约束包括文件信息,所述文件信息包括文件路径、文件名、文件类型、文件大小和文件修改时间;在所述终端设备的系统开机时,启动所述扫描进程。7.根据权利要求1或6所述的文件扫描方法,其特征在于,所述基于历史扫描文件表,将
所述文件队列中未扫描的文件作为待扫描文件的步骤,包括:针对所述文件队列中的每个文件,判断所述历史扫描文件表中是否存在与该文件的唯一约束字段一致的内容,若否,则确定该文件为未扫描文件,以将该文件作为待扫描文件。8.一种文件扫描装置,其特征在于,应用于终端设备,所述终端设备包括数据库,所述终端设备安装有扫描进程,所述文件扫描装置包括遍历模块、扫描模块和广播模块;所述遍历模块,用于在所述扫描进程监听到任一外部存储设备的挂载通知时,对所述外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列;所述扫描模块,用于基于历史扫描文件表,将所述文件队列中未扫描的文件作为待扫描文件,其中,所述历史扫描文件表中记录有已扫描文件的文件信息;还用于开启第一线程池,以多线程并行的方式,对所有所述待扫描文件进行扫描,并将扫描出的扫描信息插入至所述数据库;所述广播模块,用于在所有所述待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程所述数据库待访问。9.一种终端设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机程序,所述处理器可执行所述计算机程序以实现如权利要求1-7中任一项所述的文件扫描方法。10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的文件扫描方法。
技术总结本发明实施例提出一种文件扫描方法、装置、终端设备及存储介质,属于数据处理领域,方法包括:在扫描进程监听到任一外部存储设备的挂载通知时,对外部存储设备的文件目录进行遍历,将满足有效条件的文件加入至文件队列,基于历史扫描文件表,将文件队列中未扫描的文件作为待扫描文件,开启第一线程池,以多线程并行的方式,对所有待扫描文件进行扫描,并将扫描出的扫描信息插入至数据库,在所有待扫描文件扫描结束后,向其余进程广播扫描结束通知,以通知其余进程数据库待访问,以仅扫描历史上未扫描过的待扫描文件,在一定程度上避免重复扫描,且采用多线程并行扫描的方式,能够大幅减少扫描的时耗。减少扫描的时耗。减少扫描的时耗。
技术研发人员:肖雷 许正辉 李林
受保护的技术使用者:北斗星通智联科技有限责任公司
技术研发日:2022.04.22
技术公布日:2022/7/5