news 2026/6/21 18:49:57

跟我一起学“仓颉”编程语言-文件操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
跟我一起学“仓颉”编程语言-文件操作

在进行文件操作的时候,需要导包

import std.fs.*

一、Path类

package Study import std.fs.* main() { // 目录路径 let path1 = Path("C:\\Users\\ultra\\Desktop\\仓颉视频") println(path1) // 文件路径 let path2 = Path("C:/Users/ultra/Desktop/仓颉视频/1.1 仓颉环境搭建及Hello World.mp4") println(path2) // 相对路径 let path3 = Path("./src") println(path3) let path4 = Path("./src/main.cj") println(path4) }

path类的成员

package Study import std.fs.* main() { // 目录路径 let path1 = Path("C:\\Users\\ultra\\Desktop") println(path1) // 相对路径 let path2 = Path("./src/main.cj") println(path2) println() // 成员变量 // 获取路径文件名(含后缀)或最后一级目录 println(path1.fileName) println(path2.fileName) // 获取路径文件名(不含后缀)或最后一级目录 println(path1.fileNameWithoutExtension) println(path2.fileNameWithoutExtension) // 获取文件后缀 println(path2.extensionName) println() // 成员函数 // 判断是否是绝对路径 println(path1.isAbsolute()) println(path2.isAbsolute()) // 判断是否是相对路径 println(path1.isRelative()) println(path2.isRelative()) // 判断是否是目录 println(FileInfo(path1).isDirectory()) println(FileInfo(path2).isDirectory()) // 判断是否是文件 println(FileInfo(path1).isRegular()) println(FileInfo(path2).isRegular()) // 判断是否是软连接 println(FileInfo(path1).isSymbolicLink()) println(FileInfo(path2).isSymbolicLink()) }

路径拼接

package Study import std.fs.* main() { var path1 = Path("./src") var fileStr = "main.cj" // path1是字符串类型 path1 = path1.join(fileStr) println(path1) println() var path2 = Path("./src") var filePath = Path("main.cj") // path2是Path类型 path2 = path2.join(filePath) println(path2) }

二、Directory类

创建和删除

package Study import std.fs.* main() { var path1 = Path("./src") var newDir1 = "dir1" path1 = path1.join(newDir1) try { // 非递归创建 Directory.create(path1) } catch (_: FSException) { println("创建失败") } var path2 = Path("./src") var newDir2 = "dir2" path2 = path2.join(newDir2) try { // 递归创建 Directory.create(path2, recursive: true) } catch (_: FSException) { println("创建失败") } println("创建完成") try { // 非递归删除 // 判断路径是否存在 if (exists(path1)) { remove(path1) } } catch (_: FSException) { println("删除失败") } try { // 递归删除 // 判断路径是否存在 if (exists(path2)) { remove(path2, recursive: true) } } catch (_: FSException) { println("删除失败") } println("删除完成") }

复制和剪切

在dir1、dir2目录下,分别新建一个dir1.txt、dir2.txt文件,里面分别输入“dir1文件”和“dir2文件”的字样。

复制dir2目录,在scr目录下,为dir2_copy,剪切dir2目录到dir1目录下

package Study import std.fs.* main() { let path1 = Path("./src/dir1") let path2 = Path("./src/dir2") // 复制dir2的文件路径 let path3 = Path("./src/dir2_copy") // 剪切dir2的文件路径 let path4 = Path("./src/dir1/dir2") // // 复制 try { if (!exists(path3)) { copy(path2, to: path3, overwrite: false) } } catch (_: FSException) { println("复制失败") } println("复制完成") // 剪切(移动) try { if (!exists(path4)) { copy(path2, to: path4, overwrite: true) } } catch (_: FSException) { println("剪切失败") } println("剪切完成") }

创建子目录和文件

在dir2_copy目录下,创建dir3目录,并dir2_copy目录下创建dir2_copy.txt文件

package Study import std.fs.* main() { let path = Path("./src/dir2_copy") if (exists(path)) { // 创建dir3目录 Directory.create(path.toString() + "/dir3") Directory.create(path.toString() + "dir2_copy.txt") } println("创建完成") }

遍历目录的子目录

package Study import std.fs.* main() { let path = './src/dir1' let curDir = Directory.create(path) // 遍历当前目录下的子目录和文件,不含子目录中的文件 for (item in Directory.readFrom(path)) { println("${item.path}") } }

三、File类

创建和删除

在src目录下,dir2_copy目录下的dir3目录下,创建文件dir3.txt

package Study import std.fs.* main() { let path = Path("./src/dir2_copy/dir3/dir3.txt") // 创建文件 if (!exists(path)) { let file = File.create(path) if (!file.isClosed()) { file.close() println("文件关闭") } println("创建成功") } println() // 删除文件 try { remove(path) } catch (_: FSException) { println("删除失败") } println("删除成功") }

复制和移动

在src目录下,dir2_copy目录下的dir3目录下,复制dir3.txt为dir3_copy.txt,将dir3.txt移动到src目录下

package Study import std.fs.* main() { let path1 = Path("./src/dir2_copy/dir3/dir3.txt") let path2 = Path("./src/dir2_copy/dir3/dir3_copy.txt") // 复制 try { copy(path1, to: path2, overwrite: false) println("复制成功") } catch (_) { println("复制失败") } println() // 移动 try { copy(path1, to: Path("./src/dir3.txt"), overwrite: true) println("移动成功") } catch (_) { println("移动失败") } }

四、FileInfo类

通过Directory类的成员info可以获得目录的信息,通过File类的成员info可以获得文件的信息。

package Study import std.fs.* main() { let fileInfo = FileInfo("./src/dir1") println("目录: ${fileInfo.isDirectory()}") println("软链接: ${fileInfo.isSymbolicLink()}") println("文件: ${!fileInfo.isDirectory()}") println("创建时间: ${fileInfo.creationTime}") println("最后访问时间: ${fileInfo.lastAccessTime}") println("最后修改时间: ${fileInfo.lastModificationTime}") if (let Some(fileInfo) <- fileInfo.parentDirectory) { println("父级目录路径: ${fileInfo.path}") } }

五、小结

本章为大家详细的介绍了仓颉编程语言中文件操作的内容,下一章,为大家带来基本输入输出流的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 23:22:18

跟我一起学“仓颉”编程语言-多线程练习题

一、练习题1. 设计四个线程对象&#xff0c;给定两个整数&#xff0c;两个线程执行减操作&#xff0c;两个线程执行加操作&#xff0c;减法操作减到0为止&#xff0c;加法操作加到100为止。package Study // 导包 import std.sync.*// 加法 var number1 0 // 减法 var number2…

作者头像 李华
网站建设 2026/6/13 23:22:16

深入解析EMO-Ai-7b-Q8_0-GGUF模型架构与量化技术原理

深入解析EMO-Ai-7b-Q8_0-GGUF模型架构与量化技术原理 【免费下载链接】EMO-Ai-7b-Q8_0-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/HefeiAicc/EMO-Ai-7b-Q8_0-GGUF EMO-Ai-7b-Q8_0-GGUF是基于Klevin/EMO-Ai-7b基础模型转换而来的GGUF格式量化模型&#xff0c;采…

作者头像 李华
网站建设 2026/6/13 23:22:14

神经渲染:让千年文物在数字世界“活”起来

神经渲染&#xff1a;让千年文物在数字世界“活”起来 引言 当古老的青铜鼎、斑驳的壁画与前沿的人工智能技术相遇&#xff0c;会碰撞出怎样的火花&#xff1f;神经渲染&#xff0c;作为计算机视觉与图形学交叉领域的新星&#xff0c;正悄然改变着文物保护与传承的范式。它不…

作者头像 李华
网站建设 2026/6/14 6:24:13

2026年6月7日 | 蜂群智能体系统理论研究洞察报告

核心观点提要 如果用一句话概括2026年6月第一周至第二周的智能体产业动向&#xff0c;那就是&#xff1a;当安全漏洞从"智能体行为"层面下沉到"智能体运行时基础设施"层面时&#xff0c;市场正在被倒逼出从"Agent安全"到"安全的Agent基础设…

作者头像 李华
网站建设 2026/6/13 14:16:01

企业级工作流引擎与AI代理的挑战及优化

1. 企业级工作流引擎的核心挑战与WoW基准测试 工作流引擎作为企业系统的中枢神经&#xff0c;其复杂程度远超表面所见。在传统认知中&#xff0c;工作流仅仅是按预定顺序执行的任务序列&#xff0c;但真实企业环境中的工作流更像是一个动态的生态系统。以ServiceNow平台为例&am…

作者头像 李华
网站建设 2026/6/16 10:14:36

没有嘉宾怎么做访谈视频?5款虚拟访谈节目批量制作工具实测

没有嘉宾时的访谈节目产能瓶颈很多知识博主、MCN机构和播客团队都想做对谈类内容&#xff0c;但凑齐多位嘉宾的时间与场地成本极高。寻找一款高效的虚拟访谈节目批量制作工具&#xff0c;成为突破产能瓶颈的核心。传统做法是找素材拼接或单人分饰多角&#xff0c;但画面割裂且容…

作者头像 李华