当前位置: 首页 > article >正文

uniapp中对于文件和文件夹的处理,内存的查询

目录

移动文件到指定文件夹

新增本地文件夹

设定本地文件过期时间,清除超时文件,释放内存

操作本地文件之----删除

uniapp获取设备剩余存储空间的方法

读取本地文件夹下的文件


移动文件到指定文件夹

	function moveTempFile(tempFilePath, targetFolderPath, targetFileName) {plus.io.resolveLocalFileSystemURL(tempFilePath, function(entry) {// 获取目标目录的Entry对象plus.io.resolveLocalFileSystemURL(targetFolderPath, function(dirEntry) {// 执行复制操作entry.copyTo(dirEntry, targetFileName, function(newEntry) {//删除临时文件plus.io.resolveLocalFileSystemURL(tempFilePath, (entry) => {entry.remove(() => {console.log('临时文件转移成功');}, function(error) {console.error('临时文件转移失败:' + error.code);});});if (targetFileName.endsWith("mp4")) {console.log('判断临时文件为视频文件');getVideoNum()}}, function(e) {console.error('文件复制失败: ' + JSON.stringify(e));});}, function(e) {console.error('无法访问目标目录: ' + JSON.stringify(e));});}, function(e) {console.error('无法访问源文件: ' + JSON.stringify(e));});}
}

新增本地文件夹

//创建一个新目录
function CreateNewDir(url, dirName) {//url值可支持相对路径URL、本地路径URLreturn new Promise((resolver, reject) => {plus.io.resolveLocalFileSystemURL(url, function(entry) {entry.getDirectory(dirName, {create: true,exclusive: false}, function(dir) {resolver(true)}, function(error) {reject(error.message)uni.showToast({title: dirName + '目录创建失败:' + error.message,duration: 2000,icon: 'none'});});}, function(e) {reject(error.message)uni.showToast({title: '获取目录失败:' + e.message,duration: 2000,icon: 'none'});});})
}

设定本地文件过期时间,清除超时文件,释放内存

dataNum为文件的保质期

	//获取当前n天之前的日期getDelTime(dataNum){let today = new Date();let nDaysAgo = new Date(today.setDate(today.getDate() - dataNum));let year = nDaysAgo.getFullYear();let month = nDaysAgo.getMonth() + 1; // 月份是从0开始的,所以需要加1let day = nDaysAgo.getDate();// 将年月日转换为数字格式的字符串,不带任何分隔符-------n天前的年月日let numericDate = year.toString() + (month < 10 ? '0' + month : month).toString() + (day < 10 ? '0' + day : day).toString();	this.delExpiredFile(Number(numericDate))},//循环遍历视频图片文件夹,遍历出n天前的文件list,并执行删除操作async delExpiredFile(maxTime){// console.log('maxTime',maxTime);//获取所有图片文件await this.getImgList(maxTime)//获取所有视频文件await this.getVideoList(maxTime)},getImgList(maxTime){// console.log('开始获取图片',maxTime);this.imgNameList=[]plus.io.resolveLocalFileSystemURL("/storage/emulated/0/_A/img", //指定的目录(entry) => {let directoryReader = entry.createReader(); //获取读取目录对象directoryReader.readEntries((entry) => { //历遍子目录entry.forEach((entryA)=> {if (entryA.isFile) {// 获取文件名let fileName = entryA.name;this.imgNameList.push(fileName)}});this.imgNameList.forEach((item)=> {let extractedString = item.substring(4, 12);let  result =Number(extractedString)if(result < maxTime){console.log("将要删除的图片名",item);this.delFile(item,"picture")}});},(err) => {console.log("访问目录失败");});},(err) => {console.log("访问指定目录失败:" + err.message);});},getVideoList(maxTime){this.videoNameList=[]plus.io.resolveLocalFileSystemURL("/storage/emulated/0/_A/video", //指定的目录(entry) => {let directoryReader = entry.createReader(); //获取读取目录对象directoryReader.readEntries((entry) => { //历遍子目录即可entry.forEach((entryB)=> {if (entryB.isFile) {// 获取文件名let fileName = entryB.name;this.videoNameList.push(fileName)}});this.videoNameList.forEach((item)=> {let extractedString = item.substring(6, 14);let  result =Number(extractedString)if(result < maxTime){this.delFile(item,"video")}});},(err) => {console.log("访问目录失败");});},(err) => {console.log("访问指定目录失败:" + err.message);});},//删除文件delFile(fileName,fileType){console.log('将要删除的文件名fileName',fileName);return new Promise((resolve, reject) => {let filePath=nullif(fileType=="video"){filePath=`/storage/emulated/0/_A/video/${fileName}`}else if(fileType=="picture"){filePath=`/storage/emulated/0/_A/img/${fileName}`}//删除视频文件					plus.io.resolveLocalFileSystemURL(filePath, (entry)=> {   // 删除文件entry.remove(()=> {console.log('文件删除成功');}, function(error) {console.error('文件删除失败:' + error.code);});});})},

操作本地文件之----删除

delFile(fileName,fileType){return new Promise((resolve, reject) => {let filePath=nullif(fileType=="video"){filePath=`/storage/emulated/0/_A/video/${fileName}`}else if(fileType=="picture"){filePath=`/storage/emulated/0/_A/img/${fileName}`}				//删除视频文件					plus.io.resolveLocalFileSystemURL(filePath, (entry)=> {   // 删除文件entry.remove(()=> {console.log('文件删除成功');}, function(error) {console.error('文件删除失败:' + error.code);});});})
}

uniapp获取设备剩余存储空间的方法

function getStorage() {const environment = plus.android.importClass("android.os.Environment");const statFs = plus.android.importClass("android.os.StatFs");plus.android.importClass("java.io.File");const Files = environment.getDataDirectory();const StatFs = new statFs(Files.getPath());const blockAva = parseFloat(StatFs.getAvailableBlocks());const blockSize = parseFloat(StatFs.getBlockSize());const internalMemSize = blockSize * blockAva;// 自己根据单位来计算结果,本示例计算的是以为G单位的剩余容量const freeSize = internalMemSize / 1024 / 1024 / 1024;return freeSize.toFixed(2) + 'G'
}

读取本地文件夹下的文件

注意:如果不用箭头函数的话,在plus.的方法里面是不能使用this访问外部变量的,一定一定要使用箭头函数处理。

		readFile() {const folderPath = 'file://storage/sdcard0/Android/data/io.dcloud.HBuilder/files/';this.aFileList = [];plus.io.resolveLocalFileSystemURL(folderPath, //指定的目录(entry) => {var directoryReader = entry.createReader(); //获取读取目录对象directoryReader.readEntries((entries) => { //返回的是指定文件夹下的文件列表this.aFileList = entriesthis.aFileList.forEach(i => {if (/\./.test(i.name)) {this.list.push({name: i.name})}})},(err) => {console.log("访问目录失败");});},(err) => {console.log("访问指定目录失败:" + err.message);});},

相关文章:

uniapp中对于文件和文件夹的处理,内存的查询

目录 移动文件到指定文件夹 新增本地文件夹 设定本地文件过期时间&#xff0c;清除超时文件&#xff0c;释放内存 操作本地文件之----删除 uniapp获取设备剩余存储空间的方法 读取本地文件夹下的文件 移动文件到指定文件夹 function moveTempFile(tempFilePath, targetFo…...

【Android开发】安卓手机APP使用机器学习进行QR二维码识别(完整工程资料源码)

前言:本项目是一个 Android 平台的二维码扫描应用,具备二维码扫描和信息展示功能。借助 AndroidX CameraX 库实现相机的预览、图像捕获与分析,使用 Google ML Kit 进行二维码识别。为方便大家了解项目全貌,以下将介绍项目核心代码文件 MainActivity.java 和 AndroidManifes…...

企业文件防泄密软件哪个好?

在企业文件防泄密软件领域&#xff0c;天锐绿盾和中科数安都是备受认可的品牌&#xff0c;它们各自具有独特的特点和优势。 以下是对这两款软件的详细比较&#xff1a; 天锐绿盾 功能特点 集成性强&#xff1a;集成了文件加密、数据泄露防护DLP、终端安全管理、行为审计等数据安…...

mysql 参数max_connect_errors研究

1.在server端设置max_connect_errors3&#xff0c;超过3次连接错误就block mysql> set global max_connect_errors3; Query OK, 0 rows affected (0.00 sec) mysql> show variables like max_connect_errors; --------------------------- | Variable_name | Value…...

linux 下连接mysql(下)

case 表达式 表t1中的数据如下。 select * from t1; ---------------------------- | id | student_no | name | age | ---------------------------- | 3 | 202501 | ll | 10 | | 4 | 202502 | tt | 15 | ----------------------------如果学号是202501,…...

【Qt 常用控件】多元素控件(QListWidget、QTableWidgt、QTreeWidget)

**View和**Widget的区别&#xff1f; **View的实现更底层&#xff0c;**Widget是基于**View封装实现的更易用的类型。 **View使用MVC结构 MVC是软件开发中 经典的 软件结构 组织形式&#xff0c;软件设计模式。 M&#xff08;model&#xff09;模型。管理应用程序的核心数据和…...

Linux 远程文件复制传输-----scp/rsync/sftp

scp&#xff08;Secure Copy Protocol&#xff09;是基于 SSH 的安全文件传输工具&#xff0c;可用于在本地和远程计算机之间复制文件或目录。 1. scp&#xff08;基于 SSH 复制文件&#xff09; a. 复制文件到远程 从本地复制到远程 scp localfile.txt userremote_host:/remo…...

VS2022中.Net Api + Vue 从创建到发布到IIS

VS2022中.Net Api Vue 从创建到发布到IIS 前言一、先决条件二、创建项目三、运行项目四、增加API五、发布到IIS六、设置Vue的发布 前言 最近从VS2019 升级到了VS2022,终于可以使用官方的.Net Vue 组合了,但是使用过程中还是有很多问题,这里记录一下. 一、先决条件 Visual …...

Windows 11 搭建私有知识库(docker、dify、deepseek、ollama)

一、操作系统信息 版本 Windows 11 家庭中文版 版本号 23H2 安装日期 ‎2023/‎8/‎21 操作系统版本 22631.4460二、搭建思路 ollama拉取deepseek、bge-m3模型docker拉取dify的镜像dify链接ollama使用模型&#xff0c;并上传文件搭建知识库&#xff0c;创建应用 三、搭建步骤…...

安装OpenJDK21(linux、macos)

文章目录 安装OpenJDK21java21linux下安装配置mac下安装 安装OpenJDK21 java21 封神&#xff01;Java 21正式发布了&#xff0c;迎来了史诗级新特性&#xff0c;堪称版本最强&#xff01;&#xff01;&#xff01; 视频链接&#xff1a;https://www.bilibili.com/video/BV1E8…...

变分边界详解

起因 当时看VAE论文时有这么一段&#xff0c;但是看完直接一头雾水&#xff0c;这都那跟哪&#xff0c;第一个公式咋做的变换就变出那么一堆。网上搜了很多博客都语焉不详&#xff0c;只好自己来写一篇&#xff0c;希望能解答后来人的疑惑。 公式1 参考文章&#xff1a;证据…...

Softhsm储存安全数据性能整理

目标&#xff1a;存储百万条数据对象 测试方案一&#xff1a;总大小2GB&#xff0c;每个数据对象大小约512KB&#xff0c;总条数4096条&#xff1b; 测试方案一&#xff1a;总大小2GB&#xff0c;每个数据对象大小约256B&#xff0c;总条数8388608条&#xff1b; 测试环境&am…...

KaiOS 4.0 APN List 界面加载debug

问题背景 在列表选中APN进入编辑后,退出返回列表界面时无法焦点选中编辑的APN。 代码分析 路径:gaia/apps/settings/js/panels/apn_list/panel.js 分析SettingsPanel界面加载的步骤逻辑 onBeforeShow -> onShow -> onBeforeHide -> onHide return SettingsPanel(…...

Next.js 15【实用教程】2025最新版

官网 https://nextjs.org/docs/app/getting-started Next.js 简介 Next.js 由 Vercel 开发和维护&#xff0c;旨在解决单页应用&#xff08;SPA&#xff09;和多页应用&#xff08;MPA&#xff09;在性能和 SEO 上的不足。 核心特性 服务端渲染&#xff08;SSR&#xff09;--…...

2025-02-13 学习记录--C/C++-PTA 7-17 爬动的蠕虫

一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>int main() {int N, U, D; // N: 井的总高度&#xff0c;U: 每分钟向上爬的高度&#xff0c;D: 每分钟滑下的高度int height 0; // 蠕虫当前的高度int minute 0; // 蠕虫爬行的时间sc…...

Elasticsearch+Logstash+Kibana可视化集群部署

文章目录 1.组件介绍简述2.集群规划3.Es组件部署4.Logstash组件部署5.Kibana组件部署6.Kibana的基础使用 1.组件介绍简述 Elasticsearch&#xff1a;开源实时分布式搜索和分析引擎&#xff0c;支持大规模数据存储和高吞吐量&#xff0c;提供丰富的搜索功能和可扩展性。 Logsta…...

React VS Vue

React 和 Vue 是目前最流行的两个前端框架&#xff0c;它们在设计理念、生态系统和开发体验上各有特点。以下是对 React 和 Vue 的全方位对比&#xff1a; 1. 核心设计理念 React 库而非框架&#xff1a;React 是一个用于构建 UI 的库&#xff0c;专注于视图层&#xff0c;其…...

DeepSeek+Excel 效率翻倍

2025年初&#xff0c;DeepSeek以惊人的效率突破技术壁垒&#xff0c;用极低的成本实现了与行业顶尖AI相媲美的性能&#xff0c;瞬间成为全球科技领域的热门话题。 那么AI工具的普及将如何改变我们的工作方式&#xff1f;Excel会被取代吗&#xff1f; 今天&#xff0c;珠珠带你…...

将Sqlite3数据库挂在内存上处理

创作灵感&#xff1a;最近把小学生的口算题从2位数改到3位数&#xff0c;100以内四则运算练习&#xff08;千纬数学&#xff09;再次更新&#xff0c;选取难题-CSDN博客要不断刷题目&#xff0c;以前100以内的加减乘除也是这样刷出来的&#xff0c;代码如下&#xff1a; impor…...

Vue3.5 企业级管理系统实战(六):Vue3中defineProps用法

上一节封装图标组件 SvgIcon 时&#xff0c;用到了 defineProps&#xff0c;因为它在开发中的重要性&#xff0c;这里简单看一下它的用法&#xff0c;已熟知用法的此节可跳过。 在 Vue3 的组件化开发体系里&#xff0c;组件间通信是构建高效、可维护应用程序的核心环节。defin…...

HTTP/2 由来及特性

HTTP/2 的由来 HTTP/1.x 的局限性 性能瓶颈 队头阻塞问题&#xff1a;在HTTP/1.x中&#xff0c;一个TCP连接在同一时间只能处理一个请求&#xff0c;后续请求必须等待前面的请求处理完成并收到响应后才能被处理。例如&#xff0c;当一个页面有多个资源&#xff08;如图片、脚…...

electron.vite 项目创建以及better-sqlite3数据库使用

1.安装electron.vite npm create quick-start/electronlatest中文官网&#xff1a;https://cn.electron-vite.org/ 2. 安装项目依赖 npm i3.修改 electron-builder 配置文件 appId: com.electron.app productName: text33 directories:buildResources: build files:- !**/.v…...

蓝桥杯 Java B 组之枚举算法(暴力破解)

Day 3&#xff1a;枚举算法&#xff08;暴力破解&#xff09; 枚举算法&#xff08;Brute Force&#xff09;是一种 暴力搜索 方法&#xff0c;它通过 遍历所有可能的情况 来找到正确答案。虽然它的 时间复杂度较高&#xff0c;但在 数据范围较小 时&#xff0c;它是一种简单且…...

AI 控制web浏览器基础知识准备,名词解释Xvfb,x11vnc,novnc,playwright,gradio

在探索如何让AI控制Web浏览器实现自动化任务时&#xff0c;了解底层技术栈是关键。本文将解析五个核心组件&#xff1a;Xvfb、x11vnc、novnc、playwright和gradio&#xff0c;这些工具共同构成了AI驱动浏览器的基础架构。 1. Xvfb&#xff08;X Virtual Framebuffer&#xff0…...

C++,STL容器适配器,stack:栈深入解析

文章目录 一、容器概览与核心特性核心特性速览二、底层实现原理1. 容器适配器设计2. 默认容器对比三、核心操作详解1. 容器初始化2. 元素操作接口3. 自定义栈实现四、实战应用场景1. 括号匹配校验2. 浏览器历史记录管理五、性能优化策略1. 底层容器选择基准2. 内存预分配技巧六…...

Vue笔记(十)

一、AI的基本认知 二、ChatGPT的基本使用 三、AI插件--Copilot入门 1.Copilot是由OpenAI和GitHub合作开发的AI编程辅助插件&#xff0c;基于大量代码训练&#xff0c;能根据上下文自动生成代码建议。 2.安装与配置&#xff1a;在常用代码编辑器&#xff08;如Visual Studio Cod…...

Ubuntu下载安装Docker-Desktop

下载 Ubuntu | Docker Docs 预备工作 Ubuntu增加docker apt库-CSDN博客 安装 sudo apt-get updatesudo apt install gnome-terminal# sudo apt install -y docker-composesudo apt-get install ./docker-desktop-amd64.deb 测试 sudo docker run hello-worldHello from D…...

DeepSeek 突然来袭,AI 大模型变革的危机与转机藏在哪?

随着人工智能技术的飞速发展&#xff0c;大模型领域不断涌现出具有创新性的成果。DeepSeek 的横空出世&#xff0c;为 AI 大模型领域带来了新的变革浪潮。本文将深入探讨 DeepSeek 出现后 AI 大模型面临的危机与转机。 冲冲冲&#xff01;&#xff01;&#xff01; 目录 一、…...

C#运动控制——轴IO映射

1、IO映射的作用 该功能允许用户对专用 IO 信号的硬件输入接口进行任意配置&#xff0c;比如轴的急停信号&#xff0c;通过映射以后&#xff0c;可以将所有轴的急停信号映射到某一个IO输入口上&#xff0c;这样&#xff0c;我们只要让一个IO信号有效就可以触发所有轴的急停。 进…...

ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet

集合族谱 在这些集合中&#xff0c;仅有vector和hashtable是线程安全的&#xff0c;其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现&#xff0c;实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...