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

uniapp项目 存储数据到手机本地

打开manifest.json,在App权限配置中,添加读取和写入的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

方法一:

files.js代码

/* 使用该类应开启以下权限(读取和写入)<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>*/
/* 文件编码ansi(ascii):英文标准码0-127,包括控制符和其他英文字符编码,这在后来一直统一没再变过,当然它只需要一个字节保存gb2312和gbk:这两个是ancii码加上汉字的扩展,汉字多达10万,在ancii编码基础上再加一个字节表示汉字,共可表示字符65535个,包括了繁体字。因此一个中文字符包含两个字节。eclipse中默认编码方式为gbk。在Windows中文系统中ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码。Unicode编码:顾名思义,这是国际统一标准编码,在这之前各国标准编码不统一,微软等公司需要为各国的计算机系统定制符合不同编码标准的系统,显然,成本太高,并且互联网的出现让不同编码标准的计算机交互变得困难,如:两国的邮件系统,会因为使用不同的编码标准而导致接受方收到的邮件是乱码。utf-8和utf-16编码:UTF的意思是(UCS Transfer Format),显然是随着互联网的出现,需要解决Unicode在网络上的传输问题。顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF时并不是直接的对应,而是要过一些算法和规则来转换。UTF-8就是在互联网上使用最广的一种unicode的实现方式。
*//*** 获取手机内置存储的根路径* 路径 -(~\内部存储\Android\data\io.dcloud.HBuilder)* @return {String}*/
const root = function(folder) {// 安卓10以下路径地址//const environment = plus.android.importClass("android.os.Environment");//return environment.getExternalStorageDirectory();//兼容安卓10+ (通用)- 路径最好为"_downloads/",否则在手机中找不到路径const localFile = plus.io.convertLocalFileSystemURL("_downloads/");return localFile;	
}/*** 获取指定文件夹下的所有文件和文件夹列表* @param {String} path 文件夹路径* @return {Array<String>} 文件和文件夹列表*/
const filelist = function(dir = '') {const File = plus.android.importClass("java.io.File");let list = [];let file = new File(dir);let tempList = file.listFiles();for (let i = 0; i < tempList.length; i++) {let fileName = tempList[i].getName();list.push(fileName);}return list;
}/*** 创建文件* @return {boolean} flase=失败(已存在、操作失败),true=成功*/
const createNewFile = function(path = '') {const File = plus.android.importClass('java.io.File');let file = new File(path);if (!file.exists()) {return file.createNewFile();}return false;
}/*** 创建文件夹* @return {boolean} flase=失败(已存在、操作失败),true=成功*/
const mkdirs = function(path = ''){const File = plus.android.importClass('java.io.File');let file = new File(path);if (!file.exists()) {return file.mkdirs();}return false;
}/*** 读取文件* @param {String} path 文件路径* @param {String} charset 编码* @return {Array<String>} 内容列表(按行读取),文件不存在或异常则返回false*/
const readTxt = function(path = '', charset = 'utf-8') {const File = plus.android.importClass('java.io.File');const InputStreamReader = plus.android.importClass('java.io.InputStreamReader');const BufferedReader = plus.android.importClass('java.io.BufferedReader');const FileInputStream = plus.android.importClass('java.io.FileInputStream');let file = new File(path);let inputStreamReader = null;let bufferedReader = null;let list = [];try {if (!file.exists()) {return false;}inputStreamReader = new InputStreamReader(new FileInputStream(file), charset);bufferedReader = new BufferedReader(inputStreamReader);let line = '';while (null != (line = bufferedReader.readLine())) {list.push(line);}bufferedReader.close();inputStreamReader.close();} catch (e) {if (null != bufferedReader) {bufferedReader.close();}if (null != inputStreamReader) {inputStreamReader.close();}return false;}return list;
}/*** 写入文件内容* @param {String} path 文件路径* @param {String} content 内容* @param {boolean} append 内容写入类型,false=不追加(覆盖原有内容),true=追加(从内容尾部写入)* @param {String} charset 编码* @return {boolean} true=成功,false=失败*/
const writeTxt = function(path = '', content = '', append = false, charset = 'utf-8') {const File = plus.android.importClass('java.io.File');const FileOutputStream = plus.android.importClass('java.io.FileOutputStream');const OutputStreamWriter = plus.android.importClass('java.io.OutputStreamWriter');var outputStreamWriter;try{// 创建文件夹和文件plus.io.requestFileSystem(plus.io.PRIVATE_DOC, fs => {fs.root.getFile(path, {create: true});});outputStreamWriter = new OutputStreamWriter(new FileOutputStream(path, append), charset);outputStreamWriter.write(content);outputStreamWriter.close();} catch (e) {if (null != outputStreamWriter) {outputStreamWriter.close();}return false;}return true; // 创建不来文件夹,不好使/* let file = new File(path);try {//不存在则创建新的文件if (!file.exists()) {// 创建文件夹file.mkdirs();if(file.exists){// file.createNewFile() 创建文件夹创建不了let fileName = new File("demo.json");fileName.createNewFile();}}outputStreamWriter = new OutputStreamWriter(new FileOutputStream(path, append), charset);outputStreamWriter.write(content);outputStreamWriter.close();} catch (e) {if (null != outputStreamWriter) {outputStreamWriter.close();}return false;}return true; */
}/*** 判断文件是否存在* @param path 文件路径* @return true=存在 false=不存在*/
const isFileExist = function(path = ''){const File = plus.android.importClass('java.io.File');return new File(path).exists()
}/*** 删除文件* @param {String} path*/
const deleteFile = function(path = ''){const File = plus.android.importClass('java.io.File');let file = new File(path);if (file.exists()) {return file.delete();}return false  
} export default {root,filelist,createNewFile,mkdirs,readTxt,writeTxt,isFileExist,deleteFile
}

使用方法:

import FileJS  from '@/utils/files.js';//引用方法
           // 获取文件路径const filePaths = FileJS.root()+'/demo/dd.json';// 获取要写入的内容const content = data;// 写入文件const result =  FileJS.writeTxt(filePaths, content);// 如果写入成功if (result) {console.log("文件写入成功",filePaths);} else {console.error("文件写入失败");}// 读取文件内容const readData = FileJS.readTxt(filePaths)console.log("readData"readData);

 方法二:

应用私有资源目录,对应常量plus.io.PRIVATE_WWW,仅应用自身可读应用私有文档目录,对应常量plus.io.PRIVATE_DOC,仅应用自身可读写应用公共文档目录,对应常量plus.io.PUBLIC_DOCUMENTS,多应用时都可读写,常用于保存应用间共享文件应用公共下载目录,对应常量plus.io.PUBLIC_DOWNLOADS,多应用时都可读写,常用于保存下载文件常量:PRIVATE_WWW: 应用私有资源目录常量PRIVATE_DOC: 应用私有文档目录常量PUBLIC_DOCUMENTS: 应用公共文档目录常量PUBLIC_DOWNLOADS: 应用公共下载目录常量方法:requestFileSystem: 请求本地文件系统对象resolveLocalFileSystemURL: 通过URL参数获取目录对象或文件convertLocalFileSystemURL: 将本地URL路径转换成平台绝对路径convertAbsoluteFileSystem: 将平台绝对路径转换成本地URL路getAudioInfo: 获取音频文件信息getFileInfo: 获取文件信息getImageInfo: 获取图片信息getVideoInfo: 获取视频文件信息

toolFile.js:

// 读取json文件
function getJsonData(path) { //path:路径console.log("getData");return new Promise(resolve => { //文件读写是一个异步请求 用promise包起来方便使用时的async+awaitplus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, fs => { //请求文件系统fs.root.getFile(path, { //请求地址文件  '/storage/emulated/0/config.txt'为根目录  '/config.txt'为/storage/Android/data/io.dcloud.HBuilder(包名)/documents/config.jscreate: true //当文件不存在时创建}, fileEntry => {fileEntry.file(function(file) {let fileReader = new plus.io.FileReader(); //new一个可以用来读取文件的对象fileReaderfileReader.readAsText(file, "utf-8"); //读文件的格式fileReader.onerror = e => { //读文件失败console.log("获取文件失败", fileReader.error);plus.nativeUI.toast("获取文件失败,请重启应用", {background: "rgba(255, 255, 255, 0.6)",});return;};fileReader.onload = e => { //读文件成功console.log("读取文件成功");let txtData = e.target.result;// console.log(txtData);resolve(txtData); //回调函数内的值想返回到函数外部  就用promise+resolve来返回出去};});}, error => {console.log("2新建获取文件失败", error);plus.nativeUI.toast("获取文件失败,请重启应用", {background: "rgba(255, 255, 255, 0.6)",});return;});},e => {console.log("1请求文件系统失败", e.message);plus.nativeUI.toast("请求系统失败,请重启应用", {background:  "rgba(255, 255, 255, 0.6)",});return;});});
};
// 写入josn文件
function changeData(path, seek, writeData) { //参数1:上传路径,参数2:seek方法可设置文件操作指定位置,参数3:写入的json数据return new Promise(resolve => {// resolveLocalFileSystemURL  requestFileSystem  PUBLIC_DOCUMENTS PRIVATE_DOCplus.io.requestFileSystem(plus.io.PRIVATE_DOC, fs => {fs.root.getFile(path, {create: true}, fileEntry => {fileEntry.file(file => {fileEntry.createWriter(writer => {console.log(fs.root.toURL(),'写入路径')plus.nativeUI.showWaiting("正在保存信息");writer.seek(seek); //覆盖文件// 对象转成json字符串/* const writeDataTemp = JSON.stringify(writeData, null,"\r").replace(/[\r]/g, ""); */writer.write(writeData); // 整个文件重写writer.onerror = function() {console.log("写入文件失败", writer.error.message);plus.nativeUI.closeWaiting();plus.nativeUI.toast("修改信息失败,请重新操作", {background: "rgba(255, 255, 255, 0.6)",});return;};writer.onsuccess = function() { //填写文件成功plus.nativeUI.closeWaiting();plus.nativeUI.toast("保存成功", {// background: "rgba(255, 255, 255, 0.6)",});resolve("1");};},error => {console.log("3创建creactWriter失败", error);plus.nativeUI.toast("保存文件失败,请重新操作", {// background: "#ffa38c",});return;});});},error => {console.log("2获取文件失败", error);plus.nativeUI.toast("保存文件失败,请重新操作", {// background: "#ffa38c",});return;});}, e => {console.log("1请求文件系统失败", e.message);plus.nativeUI.toast("请求系统失败,请重新操作", {// background: "#ffa38c",});return;});});
}
/*** 储存文件到指定的地址:把一个文件移动到另外一个位置 剪切文件 重命名文件* @param {String} url				 	新的地址 _doc/ 开头* @param {String} file                	原文件地址* @param {String} newfilename 			新的文件名*/
async function saveFile(url, file, newfilename) {let c = await creatDirs(url)let isokm = moveDirectyOrFile(file, url + "/", newfilename);return isokm
}
//循环创建目录 url:"_doc/...."  _doc开头
async function creatDirs(url) {let urllist = url.split("/");console.log(urllist)//创建文件夹let u = "";for (let i = 0; i < urllist.length - 1; i++) {let j = i;if (i == 0) {u = urllist[i];} else {u = u + "/" + urllist[i];}console.log(i + "-------------------")console.log(u)console.log(urllist[j + 1])await CreateNewDir(u, urllist[j + 1]);}
}
//重命名目录或文件名
function moveDirectyOrFile(srcUrl, dstUrl, newName) { //srcUrl需要移动的目录或文件,dstUrl要移动到的目标目录(父级)plus.io.resolveLocalFileSystemURL(srcUrl, function(srcEntry) {//console.log(111)plus.io.resolveLocalFileSystemURL(dstUrl, function(dstEntry) {//console.log(222)if (srcEntry.isDirectory) {//console.log(33)srcEntry.moveTo(dstEntry, newName, function(entry) {//console.log("New Path: " + entry.fullPath);return true;}, function(e) {return e;//console.log(e.message);});} else {srcEntry.moveTo(dstEntry, newName, function(entry) {//console.log("New Path: " + entry.fullPath);return true;}, function(e) {return e;//console.log(e.message);});}}, function(e) {uni.showToast({title: '获取目标目录失败:' + e.message,duration: 2000,icon: 'none'});});}, function(e) {uni.showToast({title: '获取目录失败:' + e.message,duration: 2000,icon: 'none'});});
}//创建一个新目录
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'});});})
}
/*** 复制文件* @param {String} url        文件地址,文件路径,最好是相对路径 url:"_doc/...."  _doc开头* @param {String} newUrl     目标目录,最好是相对路径 url:"_doc/...."  _doc开头* @param {String} newName    拷贝后的文件名称,默认为原始文件名称*/
function copyFileTo(url, newUrl, dirName, newName) {if (url.length >= 7 && "file://" == url.substring(0, 7)) {url = url.substring(7)}let tempUrl = url.substring(0, url.lastIndexOf('/'));let addUrl = newUrl + '/' + dirName;console.log(addUrl, tempUrl)if (addUrl == tempUrl) {return url;}console.log(newUrl, dirName, newName)return new Promise((resolve, reject) => {plus.io.resolveLocalFileSystemURL(url, async (entry) => {if (entry.isFile) {let c = await CreateNewDir(newUrl, dirName)let u = await getDirsys(addUrl)entry.copyTo(u, newName, en => {resolve(en.fullPath);}, e => {console.log(e);reject('错误:复制时出现错误')uni.showModal({title: "错误",content: "复制时出现错误"})})} else {reject('错误:路径必须是文件')uni.showModal({title: "错误",content: "路径必须是文件"})}}, (e) => {console.log(e);reject(e)uni.showModal({title: "错误",content: "打开文件系统时出错"})});})
}
//获取目录对象
function getDirsys(url) {return new Promise((resolve, reject) => {plus.io.resolveLocalFileSystemURL(url, (entry) => {resolve(entry)}, (e) => {reject(e)console.log(e);});})
}
//将这些方法暴露出去
export {getJsonData,changeData,saveFile,creatDirs,moveDirectyOrFile,copyFileTo,getDirsys,
};

使用方法: 

import {getJsonData,changeData} from '@/utils/toolFile.js';//引用方法
//兼容安卓10+ (通用)- 路径最好为"_downloads/",否则在手机中找不到路径const pathUrl = plus.io.convertLocalFileSystemURL("_downloads/") +  'feature.json'//安卓10以下路径地址  安卓10+	pathUrl2  会报targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径。请更改为应用运行路径 
//const pathUrl2 = '/storage/emulated/0/' + 'demo.json'/**
* 写入方法
* pathUrl - 上传路径
*  0
*  全局变量数据
*/
changeData(pathUrl, 0, data); // 读取方法
getJsonData(pathUrl).then(data=>{console.log("data",data);
})

相关文章:

uniapp项目 存储数据到手机本地

打开manifest.json&#xff0c;在App权限配置中&#xff0c;添加读取和写入的权限 <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&g…...

景联文科技医疗数据处理平台:强化医疗数据标注与管理,推动医疗数字化新篇章

随着医疗科技快速进步与广泛应用&#xff0c;医疗信息的规模正在迅速扩张&#xff0c;如何有效管理这些医疗数据成为了关键议题。 医疗数据不仅包括传统的纸质病历&#xff0c;还有电子病历、实验室检测结果、医学影像等多样化的数字信息。为确保这些数据能为临床决策、科研分析…...

vue使用高德地图实现轨迹显隐

<template><div><el-button type"primary" click"pathShowOrHide">轨迹显/隐</el-button><div id"container" /></div> </template><script> import AMapLoader from amap/amap-jsapi-loaderex…...

Maven(20) 如何使用Maven进行版本管理?

Maven提供了一套强大的版本管理机制&#xff0c;允许开发者管理项目的版本号&#xff0c;并在不同的版本之间进行升级和降级。以下是如何使用Maven进行版本管理的详细步骤和代码示例&#xff1a; 步骤 1: 定义项目版本 在pom.xml文件中&#xff0c;你需要定义项目的版本号。版…...

AWS RDS MySQL内存使用

1. AWS RDS所拥有的内存&#xff08;实例类型&#xff09;&#xff0c;和数据库能够使用的内存是不同的。RDS实例为操作系统和 RDS 管理进程预留了内存&#xff0c;数据库使用内存大小&#xff0c;小于数据库实例类的硬件规格中所示的值&#xff08;以 GiB 为单位&#xff09;[…...

Vue指令:v-else、v-else-if

目录 1.语法&#xff1a; 2. 题目 3.页面展示 4.结构 1.语法&#xff1a; 1.作用&#xff1a;辅助v-if进行判断渲染 2.语法&#xff1a;v-else 、v-esle-if"表达式" 2. 题目 <!DOCTYPE html> <html lang"en"> <head><meta chars…...

基于SSM志愿者招募系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;志愿组织管理&#xff0c;组织信息管理&#xff0c;组织申请管理&#xff0c;志愿活动管理活动报名管理 用户账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;…...

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法&#xff0c;它们不仅帮助我们理解和描述复杂系统的行为&#xff0c;还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发&#xff0c;逐步深入到各种优化算法&#xff0c;并探讨它们在实际问题中的应用。 思维导图文件可获取&#xff1a;https:…...

微信小程序生成二维码

目前是在开发小程序端 --> 微信小程序。然后接到需求&#xff1a;根据 form 表单填写内容生成二维码&#xff08;第一版&#xff1a;表单目前需要客户进行自己输入&#xff0c;然后点击生成按钮实时生成二维码&#xff0c;不需要向后端请求&#xff0c;不存如数据库&#xf…...

自由软件与开源软件:异同与联系

自由软件与开源软件&#xff1a;异同与联系 随着信息技术的快速发展&#xff0c;自由软件运动与开源软件运动成为推动软件开发领域变革的重要力量。虽然这两个概念在日常对话中常被交替使用&#xff0c;但它们各自有着不同的理念和发展历程。本文将探讨自由软件运动与开源软件…...

Vue中ref、reactive、toRef、toRefs的区别

一、ref、reactive setup 函数中默认定义的变量并不是响应式的&#xff08;即数据变了以后页面不会跟着变&#xff09;&#xff0c;如果想让变量变为响应式的变量&#xff0c;需要使用 ref 和 reactive 函数修饰变量。 ref 函数可以把基本类型变量变为响应式引用reactive 函数…...

凸极式发电机的相量图分析和计算,内功率因数角和外功率因数角和功角的定义。

图1&#xff1a;同步发电机稳态相量图 若发电机为凸极式&#xff0c;由于凸极机正、交轴同步电抗不等&#xff0c;即xd≠xq&#xff0c;因此必须先借助虚构电动势 E ˙ Q E ˙ q − ( x d − x q ) I ˙ d \dot{E}_Q\dot{E}_q-(x_d-x_q)\dot{I}_d E˙Q​E˙q​−(xd​−xq​)…...

systemctl restart NetworkManager 重启后,文件/etc/resolv.conf修改失败

如果你在重启 NetworkManager 之后发现无法修改 /etc/resolv.conf 文件,这是因为 NetworkManager 会自动管理这个文件 为了解决这个问题,你可以采取以下两种方法之一: 方法一:禁用 NetworkManager 服务 使用以下命令停止 NetworkManager 服务:sudo systemctl stop Netwo…...

Admin.NET源码学习(5:swagger使用浅析)

直接启动Admin.NET.Web.Entry项目&#xff0c;会弹出swagger登录验证框&#xff0c;虽然采用Furion简化了项目加载过程及配置&#xff0c;但是学习源码过程就比较恼火&#xff0c;很多设置及功能搞不清楚到低是怎么启用的&#xff0c;本文记录学习Admin.NET项目中swagger的设置…...

在 openEuler 22.03 服务器上搭建 web 服务教程

一、项目背景与目标 在当今数字化时代,web 服务的搭建对于企业和个人来说都具有至关重要的意义。本项目旨在在 openEuler 22.03 服务器上搭建一个稳定、高效的 web 服务,以满足特定的业务需求。具体目标如下: 在 openEuler 22.03 服务器上成功安装和配置 Apache web 服务器…...

如何取消自动配置ipv4地址:步骤详解与实用指南

在现代网络环境中&#xff0c;自动配置IPv4地址&#xff08;APIPA&#xff0c;即自动专用IP寻址&#xff09;虽然为设备连接提供了便利&#xff0c;但在某些特定场景下&#xff0c;如服务器配置、网络故障排除等&#xff0c;手动设置静态IP地址成为必要之选。自动配置的IPv4地址…...

医院信息化与智能化系统(15)

医院信息化与智能化系统(15) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…...

小红书笔记详情API接口系列(概述到示例案例)

小红书笔记详情数据API接口是小红书开放平台提供的一项服务&#xff0c;允许开发者获取小红书上的笔记详情数据。以下是对该接口及其使用方法的详细介绍&#xff1a; 一、接口概述 小红书笔记详情数据API接口提供了一系列的接口&#xff0c;允许开发者获取笔记的标题、正文、标…...

跨境电商平台系统开发

随着全球化的不断深入&#xff0c;跨境电商作为新兴的商业模式&#xff0c;越来越受到企业和消费者的关注。跨境电商平台的系统开发不仅涉及技术层面的挑战&#xff0c;更涉及到法律、物流、支付等多方面的因素。商淘云将分享跨境电商平台系统开发的主要环节&#xff0c;包括需…...

开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-玩转ollama-Modelfile文件(二)

一、前言 在AI大模型百花齐放的时代,很多人都对新兴技术充满了热情,渴望尝试。然而,实际上要入门AI技术的门槛非常高。除了需要高端设备外,还需要面对复杂的部署和安装过程,这让许多人望而却步。在这样的背景下,Ollama的出现为广大开发者和爱好者提供了一条便捷的道路,极…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

DeepSeek越强,Kimi越慌?

被DeepSeek吊打的Kimi&#xff0c;还有多少人在用&#xff1f; 去年&#xff0c;月之暗面创始人杨植麟别提有多风光了。90后清华学霸&#xff0c;国产大模型六小虎之一&#xff0c;手握十几亿美金的融资。旗下的AI助手Kimi烧钱如流水&#xff0c;单月光是投流就花费2个亿。 疯…...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器&#xff1f; 1.迭代器…...

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加&#xff0c;传统开发模式存在效率低&#xff0c;重复劳动多等问题。若依项目通过整合主流技术框架&…...