nodejs---fs模块,文件读写操作详解,自定义一个文件写入方法
fs模块导入
Node.js 同时支持 CommonJS 和 ES 模块系统(自 Node.js v12 以来)
// 两种模块导入方式
import * as fs from 'fs';// Es6:这种方式需要在package.json中配置"type": "module"
const fs = require('fs');// commonJs:如果你只有一个单文件js那么你还是要使用这种方式导入
是否使用ES6的导入方式,取决于你是否有一个配置文件,或者就使用require导入
fs的读写文件方法
fs提供的文件操作方法包含3中模式:回调式,阻塞式,promise式
这里使用stat()方法举例,
检查文件信息 stat()
const fs = require('fs');// commonJs
const txt = '../public/file.txt'// 回调式
fs.stat(txt, (err, stats) => {if(err){console.log(err.message);}console.log(stats.isFile());
})// 阻塞式
try {const stats = fs.statSync(txt);
} catch (err) {console.error(err);
}
console.log(stats.isFile());// promise式
async function example() {try {const stats = await fs.stat(txt);} catch (err) {console.log(err);}console.log(stats.isFile());
}
example();
使用后面两种方法时需要使用try,catch来捕获错误,
这里要注意 :如果不存在txt路径的文件,会产生错误,这种错误式 被捕获的err提示的,并非式致命错误(直接终止程序),它会提示你没有这个文件,而后面对这个文件的操作也会无法执行,
读取文件内容 readFile()
// 读取文件, 读取文件内容,并返回一个字符串
fs.readFile(txt, 'utf8', (err, data) => {if(err){console.log(err.message);}console.log(data);
})
参数:文件路径,读取格式(默认式二进制流格式),回调参数,err错误信息,data读取的数据
同样的,readFile也支持三种模式:回调式,阻塞式,promise式,这里仅展示回调式
写入文件writeFile()
// 写入文件, 写入文件内容,
fs.writeFile(txt, 'hello world', (err) => {if(err){console.log(err.message);}console.log('写入成功');
})
参数:文件路径,写入的内容,回调参数,err错误信息
同样的,writeFile也支持三种模式:回调式,阻塞式,promise式,这里仅展示回调式
追加内容appendFile()
fs.appendFile(txt, 'hello world', (err) => {if(err){console.log(err.message);}console.log('追加成功');
})
参数:文件路径,写入的内容,回调参数,err错误信息
同样的,appendFile也支持三种模式:回调式,阻塞式,promise式,这里仅展示回调式
注意 writeFile会覆盖原内容,从起始位置开始写入,appendFile不覆盖原内容,从末尾位置开始写入
文件夹操作
判断一个文件夹是否存在
使用 fs.existsSync(),这里exists不推荐使用了,事实上,对于文件夹的操作都建议使用阻塞式,因为文件都必须在文件夹下操作,文件夹没有被获取的话,文件操作就无法正常执行
新建一个文件夹
使用 fs.mkdir() 或 fs.mkdirSync() 创建新文件夹
读取目录的内容
使用 fs.readdir() 或 fs.readdirSync() 读取目录的内容。
重命名文件夹
使用 fs.rename() 或 fs.renameSync() 重命名文件夹。
删除文件夹
使用 fs.rmdir() 或 fs.rmdirSync() 删除文件夹。
新建一个文件夹
这里展示如何新建一个文件夹,其他方法类似,想了解更多可以参考:在 Node.js 中使用文件夹 (nodejs.cn)
const fs = require('fs');
const path = "./public/";try {// 如果没有public文件夹则创建if (!fs.existsSync(path)) {fs.mkdirSync(path);}
} catch (err) {console.error(err);
}
封装一个setFile方法
了解了基本的读写操作后我们可以封装一个方法,
该函数接收一个文件名和一个文件内容作为参数,并将文件内容写入指定的文件中(没有则创建),路径是当前目录下新建一个public文件夹,并将文件至于public下面。
/*** @param {文件名称} baseName * @param {写入的内容} content * @param {内容是否覆盖} b 默认为false,不覆盖*/setFile(baseName,content,b)
module.exports.setFile = function (baseName, content, b = false) {// 如果没有public文件夹则创建try {if (!fs.existsSync(path)) {fs.mkdirSync(path);console.log("文件夹 public 创建成功");}} catch (err) {console.log(err);}// 判断文件是否存在,在open之前判断,回调结果在open之后fs.stat(path + baseName, (err) => {if (err) {// 文件不存在,产生错误// console.log(err);console.log(`文件 ${baseName} 创建成功`);}})if (!b) {// 不覆盖内容// fs.readFile(path + baseName, "utf-8",(err, data) => {// if (err) {// console.error(err);// }// // 读取出原来的内容拼接// content = data + content;// fs.writeFile(path + baseName, content, (err) => {// if (err) {// console.error(err);// }// console.log("写入成功");// })// })fs.appendFile(path + baseName, content, (err) => {if (err) {console.error(err);} else {console.log("写入成功");}})} else {fs.writeFile(path + baseName, content, (err) => {if (err) {console.error(err);} else {console.log("写入成功");}})}}
在同目录下新建一个useSetFile.js导入这个方法
// 导出的模块是整个文件,需要通过属性引入使用里面的方法
const setFile = require('./setFile');const file = 'file.txt';
const content = 'Hello, World!';setFile.setFile(file, content);
在控制台执行node useSetFile.js
可以看到目录下多了一个public文件夹和file.txt文件,并且写入了两个hello,world!
数据流缓冲区读写---open,close,read,write方法
出来file后缀的文件操作方法,fs模块还有基于数据流的读写方法,关于二进制数据流可以参考:
js二进制数据,文件---ArrayBuffer,二进制数组_js arraybuffer()-CSDN博客
// 打开文件,'w+/a+' 获得读,写权限,文件流起始位置在开头/末尾(a相比于a+没有读取权限), 如果文件不存在则创建,读取文件后会覆盖原有文件
fs.open(txt, 'a', (err, fd) => {if(err){console.log(err.message);}// 关闭文件, 关闭文件后才能进行其他操作fs.close(fd, (err) => {if(err){console.log(err.message);}console.log('文件关闭成功');})
})
/*** fd, 使用fs.open打开成功后返回的文件描述符* buffer, 一个Buffer对象,v8引擎分配的一段内存* offset, 整数,从缓存区中读取/写入时的初始位置,以字节为单位* length, 整数,从缓存区中读取/写入数据的字节数* position, 整数,写入/读取文件初始位置;* callback(err, written, buffer), 写入操作执行完成后回调函数,written实际写入字节数,buffer被读取的缓存区对象*/
fs.write(fd, buffer, offset, length, position, callback);
fs.read(fd, buffer, offset, length, position, callback);
整体的使用结构为
open->read/write->close
open开始拿到fd,fd为一个整数,表示打开文件返回的文件描述符,window中又称文件句柄
后续操作以fd为文件标志进行操作
const fs = require('fs');
const path = __dirname+"/public/buffer.txt";// __dirname 当前文件所在目录的绝对路径
const buffer = new Buffer.from("你好"); //每一个汉字utf8编码是3个字节,英文是1个字节fs.open(path, 'a+', (err, fd) => {fs.write(fd,buffer,0,6,0, (err) => {// 0,6,0的含义,0,6从buffer中读取6个字节,0是开始读取的位置,0是写入的位置,写入文件的起始位置 if(err){console.log(err);}else{console.log("写入成功");}})fs.read(fd,buffer,0,6,0, (err, bytes) => {// 0,6,0的含义,0,6从buffer中写入6个字节,0是开始写入的位置,0是读取的位置,读取文件的起始位置if(err){console.log(err);}else{if(bytes > 0){console.log(buffer.slice(0, bytes).toString());//打印buffer中的内容fs.read(fd,buffer,0,6,null, (err, bytes) => {// 再次读取fd中的内容时,不标记出读取位置,默认为上次读取结束的位置,'a+'表示每次将位置放置在文件末尾if(err){console.log(err);}else{if(bytes > 0){console.log(buffer.slice(0, bytes).toString());}}})}fs.close(fd, (err) => {//结束本次文件读写if(err){console.log(err);}else{console.log("关闭文件成功");}})}})});
这种方式的逻辑更加精细,可以控制数据流缓存区的位置进行读写,
值得注意的是,read和write两个方法中的3个整数参数,前两个是指定给buffer数据流缓冲区的 ,最后一个是文件的位置,当你进行read读取时,是对文件进行读取,在将读取的内容写入buffer,
当你进行write写入时,是对buffer进行读取,在将读取的内容写入文件 ,两者正好相反但是参数格式一致
完整代码总结和目录结构展示
file.js
// 两种模块导入方式
// import * as fs from 'fs';// Es6:这种方式需要在package.json中配置"type": "module"
const fs = require('fs');// commonJs
const path = require('path');const txt = '../public/file.txt'
const txtMsg = [path.dirname(txt),// 父级文件夹path.basename(txt),// 文件名,包括后缀path.extname(txt) // 文件后缀(扩展名)
]let f = 0 ;txtMsg.forEach(item => {console.log(item);
})// 同一代码块的回调执行顺序是 fs.open -> fs.close ->fs.stat -> fs.writeFile -> fs.readFile 打开文件,关闭文件,查看文件,写入文件,读取文件
// 打开文件,'w+/a+' 获得读,写权限,文件流起始位置在开头/末尾(a相比于a+没有读取权限), 如果文件不存在则创建,读取文件后会覆盖原有文件
fs.open(txt, 'a', (err, fd) => {if(err){console.log(err.message);}f = fd;console.log(fd);
})// 读取文件, 读取文件内容,并返回一个字符串
fs.readFile(txt, 'utf8', (err, data) => {if(err){console.log(err.message);}console.log(data);
}) // 写入文件, 写入文件内容,
fs.writeFile(txt, 'hello world', (err) => {if(err){console.log(err.message);}console.log('写入成功');
})// 追加文件内容
fs.appendFile(txt, 'hello world', (err) => {if(err){console.log(err.message);}console.log('追加成功');
})// 关闭文件, 关闭文件后才能进行其他操作
fs.close(f, (err) => {if(err){console.log(err.message);}console.log('文件关闭成功');
})// 文件信息
fs.stat(txt, (err, stats) => {if(err){console.log(err.message);}console.log(stats.isFile());
})// 每次执行此文件,会先打开txt.txt文件,(此时内容已清空)关闭文件,写入内容,再读取文件内容
setFile.js
// 封装一个setFile函数,该函数接收一个文件名和一个文件内容作为参数,并将文件内容写入指定的文件中(没有则创建),路径是当前目录下新建一个public文件夹,并将文件至于public下面。
// setFile(baseName,content,b)const fs = require('fs');
const path = "./public/";/*** @param {文件名称} baseName * @param {写入的内容} content * @param {内容是否覆盖} b 默认为false,不覆盖*/module.exports.setFile = function (baseName, content, b = false) {// 如果没有public文件夹则创建try {if (!fs.existsSync(path)) {fs.mkdirSync(path);console.log("文件夹 public 创建成功");}} catch (err) {console.log(err);}// 判断文件是否存在,在open之前判断,回调结果在open之后fs.stat(path + baseName, (err) => {if (err) {// 文件不存在,产生错误// console.log(err);console.log(`文件 ${baseName} 创建成功`);}})if (!b) {// 不覆盖内容// fs.readFile(path + baseName, "utf-8",(err, data) => {// if (err) {// console.error(err);// }// // 读取出原来的内容拼接// content = data + content;// fs.writeFile(path + baseName, content, (err) => {// if (err) {// console.error(err);// }// console.log("写入成功");// })// })fs.appendFile(path + baseName, content, (err) => {if (err) {console.error(err);} else {console.log("写入成功");}})} else {fs.writeFile(path + baseName, content, (err) => {if (err) {console.error(err);} else {console.log("写入成功");}})}
}
useSetFile.js
// 导出的模块是整个文件,需要通过属性引入使用里面的方法
const setFile = require('./setFile');const file = 'file.txt';
const content = 'Hello, World!';setFile.setFile(file, content);
buffer.js
const fs = require('fs');
const path = __dirname+"/public/buffer.txt";// __dirname 当前文件所在目录的绝对路径
const buffer = new Buffer.from("你好"); //每一个汉字utf8编码是3个字节,英文是1个字节fs.open(path, 'a+', (err, fd) => {fs.write(fd,buffer,0,6,0, (err) => {// 0,6,0的含义,0,6从buffer中读取6个字节,0是开始读取的位置,0是写入的位置,写入文件的起始位置 if(err){console.log(err);}else{console.log("写入成功");}})fs.read(fd,buffer,0,6,0, (err, bytes) => {// 0,6,0的含义,0,6从buffer中写入6个字节,0是开始写入的位置,0是读取的位置,读取文件的起始位置if(err){console.log(err);}else{if(bytes > 0){console.log(buffer.slice(0, bytes).toString());//打印buffer中的内容fs.read(fd,buffer,0,6,null, (err, bytes) => {// 再次读取fd中的内容时,不标记出读取位置,默认为上次读取结束的位置,'a+'表示每次将位置放置在文件末尾if(err){console.log(err);}else{if(bytes > 0){console.log(buffer.slice(0, bytes).toString());}}})}fs.close(fd, (err) => {//结束本次文件读写if(err){console.log(err);}else{console.log("关闭文件成功");}})}})});
目录结构
相关文章:
nodejs---fs模块,文件读写操作详解,自定义一个文件写入方法
fs模块导入 Node.js 同时支持 CommonJS 和 ES 模块系统(自 Node.js v12 以来) // 两种模块导入方式 import * as fs from fs;// Es6:这种方式需要在package.json中配置"type": "module" const fs require(fs);// commonJs:如果你…...
Linux(Rocky)下 如何输入中文(切换中文输入法)教程
RockyLinux如何输入中文(切换中文输入法) 注意 在字符画界面的Linux系统中 默认不具备中文输入法的功能 需要SSH或其他远程工具来实现 问题 可能大家有的时候安装了一个虚拟机之后 想切换中文输入法 但是一直找不到方法 下面将利用Rocky9.2作为演示…...
Python中包(package)与模块(module)的概念 以及 import 问题
目录 Python中 包(package) 与 模块(module) 的概念一. Python中, 包 (package) 与 模块 (module) 的概念1. 一个有 __init__.py 文件 的目录, 被视为一个 Python 的 包 (package)2. 一个Python源文件 , 被视为一个模块 (module) 二. 不同包之间 以及 同一个包的不同模块之间的…...
Android常见内存泄漏场景总结
一、非静态内部类造成的内存泄漏 造成原因:非静态内部类默认会持有外部类的引用,如果内部类的生命周期超过了外部类就会造成内存泄漏。 场景:当Activity销毁后,由于内部类中存在异步耗时任务还在执行,导致Activity实…...
未来已来:Angular、React、Vue.js——前端框架的三大巨头
目录 前言 一、Angular框架 特点和优势 核心技术和应用场景 二、React框架 特点和优势 核心技术和应用场景 三、Vue.js框架 特点和优势 核心技术和应用场景 总结: 前言 在Web前端开发领域,随着技术的不断发展,出现了众多优秀的框…...
Mybatis06-动态SQL
动态SQL 1.什么是动态SQL 什么是动态SQL:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 类似JSTL标签 官网描述: MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接…...
26-LINUX--I/O复用-select
一.I/O复用概述 /O复用使得多个程序能够同时监听多个文件描述符,对提高程序的性能有很大帮助。以下情况适用于I/O复用技术: ◼ TCP 服务器同时要处理监听套接字和连接套接字。 ◼ 服务器要同时处理 TCP 请求和 UDP 请求。 ◼ 程序要同时处理多个套接…...
spring源码解析-(2)Bean的包扫描
包扫描的过程 测试代码: // 扫描指定包下的所有类 BeanDefinitionRegistry registry new SimpleBeanDefinitionRegistry(); // 扫描指定包下的所有类 ClassPathBeanDefinitionScanner scanner new ClassPathBeanDefinitionScanner(registry); scanner.scan(&quo…...
Java 数学计算 - Random类
在Java中,Random类用于生成伪随机数。这个类在java.util包中,你可以使用它来生成整数、浮点数等不同类型的随机数。以下是关于Random类的一些学习笔记和示例。 1. 创建Random对象 首先,你需要创建一个Random对象。默认情况下,如…...
Ubuntu22.04之解决:无法关机和重启问题(二百四十三)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
大学数字媒体艺术设计网页设计试题及答案,分享几个实用搜题和学习工具 #媒体#职场发展
现在读书可不像小时候,以前想要校对试题答案,都得找到对应的纸质版答案查看,而且有的还只有答案,没有解析,无法弄清楚答案的由来。但是现在不一样了,现在我们可以通过搜题软件,寻找试题的答案&a…...
【ArcGIS微课1000例】0119:TIFF与grid格式互相转换
文章目录 一、任务描述二、tiff转grid三、grid转tif四、注意事项一、任务描述 地理栅格数据常用TIFF格式和GRID格式进行存储。TIFF格式的栅格数据常以单文件形式存储,不仅存储有R、G、B三波段的像素值,还保存有地理坐标信息。GRID格式的栅格数据常以多文件的形式进行存储,且…...
B3870 [GESP202309 四级] 变长编码
[GESP202309 四级] 变长编码 题目描述 小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他总是觉得,生活中很少用到 2 31 − 1 2^{31}-1 231−1 这么大的数,生活中常用的 0 ∼ 100 0…...
WordPress网站更换域名后如何重新激活elementor
在创建WordPress网站时,我们常常需要更改域名。但是,在更换域名后,你可能会遇到一个问题:WordPress后台中的Elementor插件授权状态会显示为不匹配。这时,就需要重新激活Elementor插件的授权。下面我会详细说明如何操作…...
linux cron 执行url
linux cron 执行url 在Linux中,你可以使用curl或wget来执行URL。如果你想要定期执行这个操作,可以使用cron来设置定时任务。 以下是一个使用curl在cron中执行URL的例子: 打开终端。 输入 crontab -e 命令来编辑你的cron作业。 添加一个新…...
压缩视频在线压缩网站,压缩视频在线压缩工具软件
在数字化时代,视频成为了人们记录和分享生活的重要载体。然而,视频文件一般都非常大,这不仅占据了大量的存储空间,也给视频的传输和分享带来了不便。因此,压缩视频成为了许多人必须掌握的技能。本文将详细介绍如何压缩…...
linux经典例题编程
编写Shell脚本,计算1~100的和 首先vi 1.sh,创建一个名为1.sh的脚本,然后赋予这个脚本权限,使用命令chmod 755 1.sh,然后就可以在脚本中写程序,然后运行。 shell脚本内容 运行结果: 编写Shell脚本…...
二叉树的实现(初阶数据结构)
1.二叉树的概念及结构 1.1 概念 一棵二叉树是结点的一个有限集合,该集合: 1.或者为空 2.由一个根结点加上两棵别称为左子树和右子树的二叉树组成 从上图可以看出: 1.二叉树不存在度大于2的结点 2.二叉树的子树有左右之分,次序不能…...
C++笔试强训day41
目录 1.棋子翻转 2.宵暗的妖怪 3.过桥 1.棋子翻转 链接https://www.nowcoder.com/practice/a8c89dc768c84ec29cbf9ca065e3f6b4?tpId128&tqId33769&ru/exam/oj (简单题)对题意进行简单模拟即可: class Solution { public:int dx[…...
【JavaScript】内置对象 - 字符串对象 ⑤ ( 判断对象中是否有某个属性 | 统计字符串中每个字符出现的次数 )
文章目录 一、判断对象中是否有某个属性1、获取对象属性2、判定对象是否有某个属性 二、统计字符串中每个字符出现的次数1、算法分析2、代码示例 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、判…...
Linux环境下测试服务器的DDR5内存性能
要在Linux环境下测试服务器的DDR5内存性能,可以采用以下几种方法和工具: ### 测试原理 内存性能测试主要关注以下几个关键指标: - **带宽**:内存每秒能传输的数据量。 - **延迟**:内存访问请求从发出到完成所需的时间…...
19、matlab信号预处理中的中值滤波(medfilt1()函数)和萨维茨基-戈雷滤波滤(sgolayfilt()函数)
1、中值滤波:medfilt1()函数 说明:一维中值滤波 1)语法 语法1:y medfilt1(x) 将输入向量x应用3阶一维中值滤波器。 语法2:y medfilt1(x,n) 将一个n阶一维中值滤波器应用于x。 语法3:y medfilt1(x,n…...
Scala 练习一 将Mysql表数据导入HBase
Scala 练习一 将Mysql表数据导入HBase 续第一篇:Java代码将Mysql表数据导入HBase表 源码仓库地址:https://gitee.com/leaf-domain/data-to-hbase 一、整体介绍二、依赖三、测试结果四、源码 一、整体介绍 HBase特质 连接HBase, 创建HBase执行对象 初始化…...
前端工程化:基于Vue.js 3.0的设计与实践
这里写目录标题 《前端工程化:基于Vue.js 3.0的设计与实践》书籍引言本书概述主要内容作者简介为什么选择这本书?结语 《前端工程化:基于Vue.js 3.0的设计与实践》书籍 够买连接—>https://item.jd.com/13952512.html 引言 在前端技术日…...
Linux☞进程控制
在终端执行命令时,Linux会建立进程,程序执行完,进程会被终止;Linux是一个多任务的OS,允许多个进程并发运行; Linxu中启动进程的两种途径: ①手动启动(前台进程(命令gedit)...后台进程(命令‘&’)) ②…...
mybatis离谱bug乱转类型
字符串传入的参数被转成了int: Param("online") String online<if test"online 0">and (heart_time is null or heart_time <![CDATA[ < ]]> UNIX_TIMESTAMP(SUBDATE(now(),INTERVAL 8 MINUTE)) )</if><if test"…...
视频监控管理平台LntonCVS视频汇聚平台充电桩视频监控应用方案
随着新能源汽车的广泛使用,公众对充电设施的安全性和可靠性日益重视。为了提高充电桩的安全管理和站点运营效率,LntonCVS公司推出了一套全面的新能源汽车充电桩视频监控与管理解决方案。 该方案通过安装高分辨率摄像头,对充电桩及其周边区域进…...
VS环境Python:深度探索与实用指南
VS环境Python:深度探索与实用指南 在编程领域,VS环境(Visual Studio环境)与Python的结合,为开发者们提供了一种强大而灵活的开发体验。这种结合不仅提升了开发效率,还增强了代码的可读性和可维护性。然而&…...
SpringBoot整合SpringSecurit(二)通过token进行访问
在文章:SpringBoot整合SpringSecurit(一)实现ajax的登录、退出、权限校验-CSDN博客 里面,使用的session的方式进行保存用户信息的,这一篇文章就是使用token的方式。 在其上进行的改造,可以先看SpringBoot…...
【算法训练 day50 打家劫舍、打家劫舍Ⅱ、打家劫舍Ⅲ】
目录 一、打家劫舍-LeetCode 198思路 二、打家劫舍Ⅱ-LeetCode 213思路 三.打家劫舍Ⅲ-LeeCode 337思路 一、打家劫舍-LeetCode 198 Leecode链接: leetcode 198 思路 dp数组含义为:当前数组范围下能偷到的最多的钱。递推公式为:dp[j] max(dp[j-2]nums[j],dp[j-1…...
做网站前端需要编程基础吗/湖南网站营销seo多少费用
SharePoint 运行状况分析器已检测到一些值得关注的关键问题。其中一条为: 作为管理员,我如何能知道哪些地方用到了这个WebPart呢? Google搜索到2条很有用的途径。 1、通过stsadm来查找webpart的引用状况。 stsadm -o enumallwebs -includeweb…...
盐城网站开发公司/市场推广渠道有哪些
.因为社区要加个bbs论坛,所以就当做练习,自己提前设计了一下数据库,由于经验有限,错误在所难免,还希望各位不吝赐教数据库的表如上图,我先把每个表都说明一下,UserInfo 记录用户的基本信息User…...
抽奖机网站怎么做/2023年火爆的新闻
太让人郁闷了,没想到竟然有人会兴师动众的用DDos攻击个人电脑,SynFlood这东西很久以前有玩过,不过被当作攻击目标确实是第一次,感觉还真是不一样。不过结果有点惨了,不是开8000端口的程序崩溃,而是阻止攻击…...
惠州建设局官方网站/抖音优化公司
nk 512; k linspace(0,2*pi,nk); t 1; % 最近邻hooping U 1; % Hubbard系数 mu 0; % 化学势1/4填充取值 N 40; % N/2是对应的y方向原子个数 m 4*N; % 总的原子的个数 T 0.001; % 温度 N1avg 0…...
上海网站建设套餐/软文模板app
2016全新精品资料-全新公文范文-全程指导写作–独家原创1/5如何给图片制作透明水印篇一:美图秀秀教你制作专属水印教程现如今爱拍照、爱摄影的童鞋越来越多,大家的电子相册里面有很多都是亲手拍摄的照片。如果在这些照片上附有一致的专属水印,…...
织梦做的网站后台登录/外链在线发布工具
本着不折腾不舒服斯基,好久没安装软件玩了。今天趁天气不错,安装下TensorFlow(cpu版)(因为没钱上GPU),首先在网上搜了下教程,原文出处: https://blog.csdn.net/u01308065…...