Python/JS/Go/Java同步学习(第五十一篇)四语言“文件上下文创建读取写入删除“对照表: 雷影“老板“要求员工休息日野外实战训练团建风暴(附源码/截图/参数表/避坑指南)
🤝 免骂声明:
- 本文
文件上下文创建读取写入删除操作经本蜀黎实战整理,旨在提供快速参考指南📝- 因各语言版本迭代及不同系统
环境差异,偶尔可能出现整理不全面之处,实属正常✅- 理性讨论欢迎,无凭据攻击将依据平台规则处理,并可能触发内容自动备份传播机制🙏!
- 若遇具体问题,请带图评论区留言,本蜀黎必拔码相助🤝
※ 温馨提示
- 若本内容
不慎触及某些利益,请理性沟通,但删稿免谈,内容去留仅由平台规则决定。 - 若是学生/自学党,欢迎白嫖,记得转发给和你一样在这条路上同行的伙伴——🔁
- 知识不该被垄断,而该成为照亮彼此前行的灯。
🛡️ 【技术剧情免责声明】
⚠️ 剧情设定说明
-
本文中的职场冲突情节,均为行业技术实践的
戏剧化隐喻 -
所有角色立场设计,旨在对比不同技术方案的适用场景
-
无任何现实指向性,亦
不倡导对立思维
🌿 技术交流初心
-
旨在通过场景化演绎,
降低技术理解门槛 -
遵循「以代码服人,以逻辑辨真」的极客精神
-
鼓励理性探讨,反对任何形式的技术偏见
💡 阅读建议
-
请重点关注技术实现路径的多样性
-
建议将剧情视为技术选型的「压力测试沙盒」
-
欢迎在评论区分享您的技术解决方案
🌿【虎山CTO·药材使用警示】
- 🍀是药
三分毒,代码亦如方! - ❌文中所涉药材均为技术隐喻,严禁实际配伍使用。
- 🙏真实用药请遵医嘱,乱用者——
- 系统崩坏事小,气血逆流事大!⚠️
📚 系列文章预告:
- 近期内容将聚焦编程基础构建,以
「原创知识矩阵」形式系统梳理核心概念。每篇如连续剧集般环环相扣,建议按顺序学习——知识点一锅端,疗效更持久!🔥
🔥 【场景还原:木叶文件管理危机】
💥 雷影老板(一掌拍碎服务器机柜)
- 「今日修炼文件操作忍术!连文件都读写不明白的忍者——罚抄《木叶数据安全法典》五百遍!」
🍜 鸣人(抱着三本不同语言教材抓狂)
- 「卡卡西老师!为什么Python用
with open像自动门,Java要写try-with-resources像保险箱,Go直接ioutil.ReadFile像开罐头,JS的fs.readFileSync像读心术?我的影分身文件都要互相覆盖了!」
📚 伊鲁卡(粉笔头精准命中鸣人脑门)
鸣人!文件操作如中医抓药——
-
打开文件 → 如打开药柜,准备取药 🗄️
-
读取内容 → 如查阅古方,获取药性 📖
-
写入内容 → 如配制新方,记录配伍 📝
-
关闭文件 → 如关闭药柜,防止受潮 🔒
-
上下文管理 → 如自动煎药,无需看管 🤖
🕶️ 卡卡西(从《亲热天堂》后抬眼)
- 「连文件句柄都不懂关闭,将来如何应对晓组织的数据窃取?」
🧘 【扎马步·文件操作心法要诀】
💡 文件操作三重境界:
-
基础境界:打开→操作→关闭 → 如抓药→配伍→封存 📦
-
进阶境界:上下文管理 → 如自动煎药机,免人工看守 ⚙️
-
大师境界:异步/并发操作 → 如多药同煎,效率倍增 🔄
🌿 中医映射心法:
-
文件路径 → 如「药方索引」,精准定位 🧭
-
文件编码 → 如「药材炮制」,决定药效 ⚗️
-
文件权限 → 如「药柜上锁」,保护秘方 🔐
-
缓冲区 → 如「药量分次」,避免溢出 🍶
-
异常处理 → 如「解毒预案」,应对意外 🚑
🏔️ 【四语言文件操作奥义】
🐍 Python → 写轮眼·优雅上下文管理
特点:with语句自动管理资源,如老中医的自动煎药壶
print("🐍 Python文件操作 - 如老中医优雅抓药")
def 中医处方管理(处方路径):
"""模拟中医处方文件管理"""
# 1. 创建新处方('w'模式 - 清空重写)
with open(处方路径, 'w', encoding='utf-8') as 处方文件:
处方文件.write("【桂枝汤】\n")
处方文件.write("桂枝 9g 白芍 9g\n")
处方文件.write("生姜 9g 大枣 4枚\n")
print(f"✅ 处方已创建: {处方路径}")
# 2. 读取处方('r'模式 - 只读)
with open(处方路径, 'r', encoding='utf-8') as 处方文件:
内容 = 处方文件.read()
print(f"📖 处方内容:\n{内容}")
# 3. 追加药材('a'模式 - 追加)
with open(处方路径, 'a', encoding='utf-8') as 处方文件:
处方文件.write("甘草 6g 炙甘草 6g\n")
print("📝 药材已追加")
# 4. 逐行读取(辨证论治)
print("\n🔍 逐行辨证:")
with open(处方路径, 'r', encoding='utf-8') as 处方文件:
for 行号, 行内容 in enumerate(处方文件, 1):
if 行内容.strip(): # 跳过空行
print(f"第{行号}味: {行内容.strip()}")
return "处方管理完成"
# 实战演示
处方路径 = "./木叶医院/桂枝汤处方.txt"
import os
os.makedirs(os.path.dirname(处方路径), exist_ok=True)
结果 = 中医处方管理(处方路径)
print(f"🎯 {结果}")
中医映射:
-
with open() as f → 如「自动煎药机」,离开自动关火🥇
-
encoding='utf-8' → 如「统一度量衡」,确保药量准确🥈
-
文件模式 → 如「不同药柜」,w清空、r只读、a追加🥉
☕ Java → 白眼·严谨资源管理
特点:try-with-resources确保资源释放,如御医的严谨配药
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.io.*;
class ImperialHospitalPrescriptionManager {
public static String managePrescription(Path prescriptionPath) throws IOException {
// 确保目录存在
Path dirPath = prescriptionPath.getParent();
if (dirPath != null && !Files.exists(dirPath)) {
Files.createDirectories(dirPath);
}
// 1. 创建新处方(覆盖写入)
Files.write(prescriptionPath,
"【小柴胡汤】\n柴胡 12g 黄芩 9g\n".getBytes(StandardCharsets.UTF_8));
System.out.println("✅ 处方已创建: " + prescriptionPath);
// 2. 读取处方内容
String content = new String(Files.readAllBytes(prescriptionPath), StandardCharsets.UTF_8);
System.out.println("📖 处方内容:\n" + content);
// 3. 追加药材
Files.write(prescriptionPath,
"半夏 9g 人参 6g\n".getBytes(StandardCharsets.UTF_8),
StandardOpenOption.APPEND);
System.out.println("📝 药材已追加");
// 4. 逐行辨证(try-with-resources 自动关闭)
System.out.println("\n🔍 逐行辨证:");
try (BufferedReader reader = Files.newBufferedReader(prescriptionPath, StandardCharsets.UTF_8)) {
String lineContent;
int lineNumber = 1;
while ((lineContent = reader.readLine()) != null) {
if (!lineContent.trim().isEmpty()) { // 使用 trim() 避免纯空格行被计数
System.out.println("第" + lineNumber + "味: " + lineContent);
lineNumber++;
}
}
}
return "处方管理完成";
}
public static void main(String[] args) {
try {
Path prescriptionPath = Paths.get("木叶医院", "小柴胡汤处方.txt");
String result = ImperialHospitalPrescriptionManager.managePrescription(prescriptionPath);
System.out.println("🎯 " + result);
} catch (IOException e) {
System.err.println("❌ 处方管理失败: " + e.getMessage());
e.printStackTrace();
}
}
}
中医映射:
-
try-with-resources → 如「配药后自动清理」,避免药材混淆🥇
-
StandardCharsets.UTF_8 → 如「皇家度量衡」,绝对标准🥈
-
Files工具类 → 如「御药房标准流程」,规范严谨🥉
⚡ Go → 体术·简洁高效操作
特点:简洁函数式操作,如游医的快速施治
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
func 游医处方管理(处方路径 string) string {
// 确保目录存在
目录 := filepath.Dir(处方路径)
if _, 错误 := os.Stat(目录); os.IsNotExist(错误) {
os.MkdirAll(目录, 0755)
}
// 1. 创建新处方(覆盖写入)
初始内容 := "【麻黄汤】\n麻黄 9g 桂枝 6g\n"
错误 := ioutil.WriteFile(处方路径, []byte(初始内容), 0644)
if 错误 != nil {
panic(错误)
}
fmt.Printf("✅ 处方已创建: %s\n", 处方路径)
// 2. 读取处方内容
内容字节, 错误 := ioutil.ReadFile(处方路径)
if 错误 != nil {
panic(错误)
}
内容 := string(内容字节)
fmt.Printf("📖 处方内容:\n%s\n", 内容)
// 3. 追加药材
文件, 错误 := os.OpenFile(处方路径, os.O_APPEND|os.O_WRONLY, 0644)
if 错误 != nil {
panic(错误)
}
defer 文件.Close()
_, 错误 = 文件.WriteString("杏仁 9g 甘草 3g\n")
if 错误 != nil {
panic(错误)
}
fmt.Println("📝 药材已追加")
// 4. 逐行辨证
fmt.Println("\n🔍 逐行辨证:")
文件, 错误 = os.Open(处方路径)
if 错误 != nil {
panic(错误)
}
defer 文件.Close()
扫描器 := bufio.NewScanner(文件)
行号 := 1
for 扫描器.Scan() {
行内容 := 扫描器.Text()
if strings.TrimSpace(行内容) != "" {
fmt.Printf("第%d味: %s\n", 行号, 行内容)
行号++
}
}
return "处方管理完成"
}
// 实战演示
func main() {
处方路径 := filepath.Join("木叶医院", "麻黄汤处方.txt")
结果 := 游医处方管理(处方路径)
fmt.Printf("🎯 %s\n", 结果)
}
中医映射:
-
defer file.Close() → 如「游医离开前必关药箱」,责任明确🥇
-
ioutil工具函数 → 如「便携药具」,开箱即用🥈
-
错误处理 → 如「游医应急方案」,随时准备🥉
🟨 JavaScript → 幻术·灵活异步操作
特点:同步/异步灵活选择,如巫医的通灵术
console.log("🟨 JS文件操作 - 如巫医通灵读写");
const fs = require('fs');
const path = require('path');
class 巫医处方管理 {
constructor(处方路径) {
this.处方路径 = 处方路径;
}
管理处方() {
// 确保目录存在
const 目录 = path.dirname(this.处方路径);
if (!fs.existsSync(目录)) {
fs.mkdirSync(目录, { recursive: true });
}
// 1. 创建新处方(覆盖写入)
fs.writeFileSync(this.处方路径,
"【白虎汤】\n石膏 50g 知母 18g\n",
'utf8');
console.log(`✅ 处方已创建: ${this.处方路径}`);
// 2. 读取处方内容
const 内容 = fs.readFileSync(this.处方路径, 'utf8');
console.log(`📖 处方内容:\n${内容}`);
// 3. 追加药材
fs.appendFileSync(this.处方路径, "粳米 9g 甘草 6g\n");
console.log('📝 药材已追加');
// 4. 逐行辨证
console.log('\n🔍 逐行辨证:');
const 所有内容 = fs.readFileSync(this.处方路径, 'utf8');
const 行数组 = 所有内容.split('\n');
行数组.forEach((行内容, 索引) => {
if (行内容.trim()) {
console.log(`第${索引 + 1}味: ${行内容}`);
}
});
return '处方管理完成';
}
// 异步版本(通灵术)
async 异步管理处方() {
const fs = require('fs').promises;
try {
// 异步读取
const 内容 = await fs.readFile(this.处方路径, 'utf8');
console.log(`🔮 通灵读取:\n${内容}`);
return '通灵完成';
} catch (错误) {
console.error('通灵失败:', 错误);
return '通灵中断';
}
}
}
// 实战演示
const 处方路径 = path.join('木叶医院', '白虎汤处方.txt');
const 巫医 = new 巫医处方管理(处方路径);
const 结果 = 巫医.管理处方();
console.log(`🎯 ${结果}`);
中医映射:
-
Sync后缀 → 如「定身术」,同步执行🥇
-
Promise异步 → 如「分身术」,同时多任务🥈
-
try-catch → 如「结界术」,保护施法🥉
📊 四语言文件操作对比丹方
| 特性 | Python | Java | Go | JavaScript |
|---|---|---|---|---|
| 打开文件 | open() |
Files.newBufferedReader() |
os.Open() |
fs.openSync() |
| 读取全部 | file.read() |
Files.readAllBytes() |
ioutil.ReadFile() |
fs.readFileSync() |
| 逐行读取 | for line in file |
BufferedReader.readLine() |
bufio.Scanner |
split('\n') |
| 写入文件 | file.write() |
Files.write() |
ioutil.WriteFile() |
fs.writeFileSync() |
| 追加内容 | 'a'模式 |
StandardOpenOption.APPEND |
os.O_APPEND |
fs.appendFileSync() |
| 自动关闭 | with语句 |
try-with-resources |
defer file.Close() |
无自动关闭 |
| 编码指定 | encoding='utf-8' |
StandardCharsets.UTF_8 |
默认UTF-8 | 'utf8'参数 |
| 目录创建 | os.makedirs() |
Files.createDirectories() |
os.MkdirAll() |
fs.mkdirSync() |
| 中医对应 | 优雅煎药 | 严谨配药 | 快速施治 | 通灵读写 |
📊 四语言文件操作模式对比表
🏛️ 打开模式对照
| 模式 | Python | Java | Go | JavaScript | 中医隐喻 |
|---|---|---|---|---|---|
| 只读 | 'r' |
StandardOpenOption.READ |
os.O_RDONLY |
'r' |
如「查阅古方」,只观不取 |
| 只写(新建) | 'w' |
StandardOpenOption.WRITEStandardOpenOption.CREATE |
os.O_WRONLYos.O_CREATE |
'w' |
如「新开药方」,从头记录 |
| 只写(追加) | 'a' |
StandardOpenOption.APPEND |
os.O_WRONLYos.O_APPEND |
'a' |
如「续写医案」,尾部添加 |
| 读写(新建) | 'w+' |
StandardOpenOption.READStandardOpenOption.WRITEStandardOpenOption.CREATE |
os.O_RDWRos.O_CREATE |
'w+' |
如「边诊边记」,读写同步 |
| 读写(追加) | 'a+' |
StandardOpenOption.READStandardOpenOption.APPEND |
os.O_RDWRos.O_APPEND |
'a+' |
如「会诊记录」,可读可续 |
| 二进制读 | 'rb' |
StandardOpenOption.READ |
os.O_RDONLY |
'rb' |
如「查看药材图谱」,原始数据 |
| 二进制写 | 'wb' |
StandardOpenOption.WRITE |
os.O_WRONLY |
'wb' |
如「记录药材照片」,原始存储 |
🔄 上下文管理模式对比
| 特性 | Python | Java | Go | JavaScript | 中医隐喻 |
|---|---|---|---|---|---|
| 核心机制 | with语句 |
try-with-resources |
defer |
无内置 | 如「煎药时间」 |
| 自动关闭 | ✅ 离开with块自动 |
✅ 离开try块自动 |
⚠️ 需手动defer |
❌ 需手动 | 如「自动关火」 |
| 异常安全 | ✅ 异常也关闭 | ✅ 异常也关闭 | ✅ defer保证执行 |
❌ 需try-finally |
如「煎糊自动关」 |
| 语法示例 | with open() as f: |
try (Reader r = ...) |
defer file.Close() |
无 | 如「设好定时器」 |
| 中医映射 | 自动煎药机 | 智能药箱锁 | 游医好习惯 | 巫师记咒语 | 安全等级 |
📁 目录操作对比(后面章节重点讲解)
| 操作 | Python | Java | Go | JavaScript | 中医隐喻 |
|---|---|---|---|---|---|
| 创建目录 | os.makedirs() |
Files.createDirectories() |
os.MkdirAll() |
fs.mkdirSync() |
如「新建药柜」 |
| 递归创建 | exist_ok=True |
createDirectories() |
MkdirAll() |
{recursive: true} |
如「建多层药柜」 |
| 检查存在 | os.path.exists() |
Files.exists() |
os.Stat() |
fs.existsSync() |
如「查看药柜」 |
| 列出文件 | os.listdir() |
Files.list() |
ioutil.ReadDir() |
fs.readdirSync() |
如「清点药材」 |
| 删除目录 | os.rmdir() |
Files.delete() |
os.RemoveAll() |
fs.rmdirSync() |
如「清空药柜」 |
⚠️ 【避坑指南·文件操作走火预警】
🐍 Python:注意编码和换行符
# 💥 坑点1:编码不一致导致乱码
with open('处方.txt', 'w') as f: # 默认编码随系统!
f.write("桂枝汤") # 中文可能乱码
# ✅ 正道:显式指定UTF-8
with open('处方.txt', 'w', encoding='utf-8') as f:
f.write("桂枝汤 ✅")
# 💥 坑点2:Windows换行符差异
with open('处方.txt', 'r') as f:
lines = f.readlines() # Windows下可能有\r\n
# ✅ 正道:统一处理
with open('处方.txt', 'r', encoding='utf-8', newline='') as f:
lines = [line.rstrip('\r\n') for line in f]
☕ Java:注意资源释放和异常
// 💥 坑点:资源未释放(古老写法)
FileReader reader = new FileReader("处方.txt");
BufferedReader br = new BufferedReader(reader);
// 如果这里异常,资源永不释放!
// ✅ 正道:try-with-resources
try (BufferedReader br = Files.newBufferedReader(Paths.get("处方.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} // 自动关闭!
// 💥 坑点:文件路径问题
Path path = Paths.get("木叶医院/处方.txt"); // Windows可能出错
// ✅ 正道:使用File.separator或Paths.get多参数
Path path = Paths.get("木叶医院", "处方.txt");
⚡ Go:注意错误处理和文件权限
// 💥 坑点:忽略错误
data, _ := ioutil.ReadFile("处方.txt") // 错误被忽略!
// ✅ 正道:检查所有错误
data, err := ioutil.ReadFile("处方.txt")
if err != nil {
log.Fatal("读取失败:", err)
}
// 💥 坑点:文件权限问题
err := ioutil.WriteFile("处方.txt", data, 0777) // 权限过宽!
// ✅ 正道:合理权限
err := ioutil.WriteFile("处方.txt", data, 0644) // 所有者可读写,其他只读
🟨 JavaScript:注意异步混淆和路径
// 💥 坑点:同步异步混用导致竞态
fs.writeFile('处方.txt', '内容', 'utf8', (err) => {
// 异步回调
});
const data = fs.readFileSync('处方.txt', 'utf8'); // 可能读取空文件!
// ✅ 正道:统一风格
// 方案1:全部同步
fs.writeFileSync('处方.txt', '内容', 'utf8');
const data = fs.readFileSync('处方.txt', 'utf8');
// 方案2:全部异步(使用async/await)
const fs = require('fs').promises;
async function handleFile() {
await fs.writeFile('处方.txt', '内容', 'utf8');
const data = await fs.readFile('处方.txt', 'utf8');
}
// 💥 坑点:相对路径问题
fs.readFileSync('./处方.txt'); // 相对当前工作目录
// ✅ 正道:使用path模块
const path = require('path');
const fullPath = path.join(__dirname, '木叶医院', '处方.txt');
fs.readFileSync(fullPath, 'utf8');
🎯 【上下文管理核心心法】
🧠 为什么需要上下文管理?
# 💥 传统方式:容易忘记关闭
file = open('处方.txt', 'w')
file.write('桂枝汤')
# 如果这里发生异常,文件永不关闭!
file.close()
# ✅ 上下文管理:自动保证关闭
with open('处方.txt', 'w') as file:
file.write('桂枝汤')
# 离开with块自动关闭,即使发生异常
🌟 通用最佳实践:
-
永远指定编码:特别是处理中文🏆
-
使用绝对路径:避免相对路径混乱🥇
-
及时关闭文件:避免资源泄漏🥈
-
备份重要文件:操作前先复制🥉
-
检查文件存在:避免空指针异常📌
以下是本蜀黎整理
源码和截图⏬
1.Python源码⏬
import os
# ==================== 财务文件模块 ====================
# with open("账本.txt") as f: # 自动上锁的保险柜 📂
# ⚠️ERP_冷溪虎山:文件不关会导致金库大门敞开
# 定义相对路径
file_path = "./file/with-test51.txt"
# 确保目录存在
os.makedirs(os.path.dirname(file_path), exist_ok=True)
# 1. 创建并写入文件('w'模式)
with open(file_path, 'w',encoding="utf8") as file:
file.write("这是第一行内容\n")
file.write("这是第二行内容\n")
print("💙💙💙💙💙💙以下是上下文管理创建写入文件")
print(f"文件已创建并写入内容: {file_path}")
# 2. 读取文件('r'模式)
with open(file_path, 'r',encoding="utf8") as file:
content = file.read()
print(f"文件内容:\n{content}")
# 3. 追加内容('a'模式)
with open(file_path, 'a',encoding="utf8") as file:
file.write("这是追加的内容\n")
print(f"内容已追加到文件: {file_path}")
# 4. 再次读取文件查看追加的内容
with open(file_path, 'r',encoding="utf8") as file:
updated_content = file.read()
print(f"更新后的文件内容:\n{updated_content}")
# 5. 读取文件逐行('r'模式)
print("\n逐行读取文件内容:")
with open(file_path, 'r',encoding="utf8") as file:
for line in file:
print(line.strip()) # strip()去除每行末尾的换行符
# 6. 删除文件
# try:
# os.remove(file_path)
# print(f"文件已删除: {file_path}")
# except FileNotFoundError:
# print(f"文件不存在,无法删除: {file_path}")
#如果不用上下文管理,需要os.close
2.Nodejs源码⏬
const fs = require('fs');
const path = require('path');
// ==================== 中药文件模块 ====================
// 安全读取丹方 // 自动封印的炼丹炉 📜
// ⚠️虎山老药师:丹方泄露会引发仙界大乱
// 定义相对路径
const filePath = './file/with-test51.txt';
// 确保目录存在
const dirPath = path.dirname(filePath);
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath, { recursive: true });
}
// 1. 创建并写入文件('w'模式)
fs.writeFileSync(filePath, "这是第一行内容\n这是第二行内容\n", 'utf8');
console.log("💙💙💙💙💙💙 以下是上下文管理创建写入文件");
console.log(`文件已创建并写入内容: ${filePath}`);
// 2. 读取文件('r'模式)
const content = fs.readFileSync(filePath, 'utf8');
console.log(`文件内容:\n${content}`);
// 3. 追加内容('a'模式)
fs.appendFileSync(filePath, "这是追加的内容\n");
console.log(`内容已追加到文件: ${filePath}`);
// 4. 再次读取文件查看追加的内容
const updatedContent = fs.readFileSync(filePath, 'utf8');
console.log(`更新后的文件内容:\n${updatedContent}`);
// 5. 读取文件逐行('r'模式)
console.log("\n逐行读取文件内容:");
const lines = fs.readFileSync(filePath, 'utf8').split('\n');
lines.forEach(line => {
if (line.trim()) { // 去除空行
console.log(line);
}
});
// 6. 删除文件(注释掉,与Python示例一致)
/*
try {
fs.unlinkSync(filePath);
console.log(`文件已删除: ${filePath}`);
} catch (err) {
if (err.code === 'ENOENT') {
console.log(`文件不存在,无法删除: ${filePath}`);
} else {
throw err;
}
}
*/
3.Go源码⏬
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
// ==================== 仓储文件模块 ====================
// 保护性打开货单 // 仓库猫的智能项圈 📦
// ⚠️冷溪物流:文件遗忘会导致货物瞬移
func main() {
// 定义相对路径
filePath := "go/file/with-test51.txt" //go和java的相对路径和Python的不一样
// 确保目录存在
dirPath := filepath.Dir(filePath)
if _, err := os.Stat(dirPath); os.IsNotExist(err) {
err := os.MkdirAll(dirPath, 0755)
if err != nil {
panic(err)
}
}
// 1. 创建并写入文件('w'模式)
content := "这是第一行内容\n这是第二行内容\n"
err := ioutil.WriteFile(filePath, []byte(content), 0644)
if err != nil {
panic(err)
}
fmt.Println("💙💙💙💙💙💙以下是上下文管理创建写入文件")
fmt.Printf("文件已创建并写入内容: %s\n", filePath)
// 2. 读取文件('r'模式)
data, err := ioutil.ReadFile(filePath)
if err != nil {
panic(err)
}
fmt.Printf("文件内容:\n%s\n", string(data))
// 3. 追加内容('a'模式)
appendContent := "这是追加的内容\n"
f, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
panic(err)
}
defer f.Close()
if _, err := f.WriteString(appendContent); err != nil {
panic(err)
}
fmt.Printf("内容已追加到文件: %s\n", filePath)
// 4. 再次读取文件查看追加的内容
data, err = ioutil.ReadFile(filePath)
if err != nil {
panic(err)
}
fmt.Printf("更新后的文件内容:\n%s\n", string(data))
// 5. 读取文件逐行('r'模式)
fmt.Println("\n逐行读取文件内容:")
file, err := os.Open(filePath)
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
if line != "" { // 去除空行
fmt.Println(line)
}
}
if err := scanner.Err(); err != nil {
panic(err)
}
// 6. 删除文件(注释掉,与Python示例一致)
/*
err = os.Remove(filePath)
if err != nil {
if os.IsNotExist(err) {
fmt.Printf("文件不存在,无法删除: %s\n", filePath)
} else {
panic(err)
}
} else {
fmt.Printf("文件已删除: %s\n", filePath)
}
*/
}
/*
4.Java源码⏬
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
// ==================== ERP文件模块 ====================
// 安全访问数据库 // 自毁式加密保险箱 💾
// ⚠️ERP老兵_冷溪虎山:资源未释放会触发系统自爆
class main51 {
public static void main(String[] args) throws IOException {
// 定义相对路径
Path filePath = Paths.get("4java/file/with-test51.txt");
// 确保目录存在
Path dirPath = filePath.getParent();
if (dirPath != null && !Files.exists(dirPath)) {
Files.createDirectories(dirPath);
}
// 1. 创建并写入文件('w'模式)
Files.write(filePath, "这是第一行内容\n这是第二行内容\n".getBytes(StandardCharsets.UTF_8));
System.out.println("💙💙💙💙💙💙以下是上下文管理创建写入文件");
System.out.println("文件已创建并写入内容: " + filePath);
// 2. 读取文件('r'模式)
String content = new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8);
System.out.println("文件内容:\n" + content);
// 3. 追加内容('a'模式)
Files.write(filePath, "这是追加的内容\n".getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);
System.out.println("内容已追加到文件: " + filePath);
// 4. 再次读取文件查看追加的内容
String updatedContent = new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8);
System.out.println("更新后的文件内容:\n" + updatedContent);
// 5. 读取文件逐行('r'模式)
System.out.println("\n逐行读取文件内容:");
try (BufferedReader reader = Files.newBufferedReader(filePath, StandardCharsets.UTF_8)) {
String line;
while ((line = reader.readLine()) != null) {
if (!line.isEmpty()) { // 去除空行
System.out.println(line);
}
}
}
// 6. 删除文件(注释掉,与Python示例一致)
/*
try {
Files.delete(filePath);
System.out.println("文件已删除: " + filePath);
} catch (NoSuchFileException e) {
System.out.println("文件不存在,无法删除: " + filePath);
} catch (IOException e) {
throw e;
}
*/
}
}
源码分享结束⏫
🌈 【剧情结尾:木叶文件忍术毕业】
🌸 小樱(展示完美的处方管理系统)
- 「鸣人你看!用Python的
with管理文件就像自动煎药机,Java的try-with-resources像智能药箱,Go的defer像游医好习惯,JS的同步/异步像巫医通灵术!文件操作再也不是难题啦!」
🍜 鸣人(举着四份运行成功的代码)
- 「哈哈哈!原来文件操作就像抓药配药——打开药柜→取药材→记录方子→关好药柜!佐助——来比谁先写完这个处方管理系统!」
🌈 佐助(写轮眼分析四语言代码)
- 「哼...吊车尾的,等你能用Go的并发安全处理万级处方文件再说吧。」
📙 卡卡西(合上《亲热天堂》)
- 「嗯...总算懂得文件操作的精髓了。记住:文件如药方,操作如抓药——规范则治病,混乱则伤人。下次教你们用数据库管理十万药方...」
🐯 虎山CTO箴言:
- 文件操作如中医抓药——打开是取药,读取是辨方,写入是记录,关闭是归位。掌握上下文管理,就掌握了资源的智慧循环!
🎯 中医心法映射:
-
文件句柄 → 如「药柜钥匙」,持有时可操作,用完必须还
-
缓冲区 → 如「药量分次」,大文件分批处理
-
编码 → 如「药材炮制」,决定最终效果
-
异常处理 → 如「解毒预案」,应对意外情况
🔖虎山CTO三道护体符
因果符:
- 🚀我每被恶意举报一次,就加更一篇干货——感谢黑粉为我提供创作燃料。
镜像符:
- 📌若遭攻击(检测到行业焦虑值上升),建议某些机构停止这种“DDoS攻击”,将资源用于提升自身课程服务的“带宽”与“质量”。
重生符:
- 💪本人是经历过生死重启的野生程序猿,系统兼容性极强——你们那点小打小闹,连个 warning 都触发不了。
⚠️ 免责声明(附因果律警告)
本代码已注入中医玄学能量,请谨慎使用:
- ✅ 允许白嫖,但白漂不点赞可能导致:
- 下次面试官恰好问到这个算法
- 键盘自动打出
//这里感谢冷溪虎山CTO - 奶茶精准洒在刚写好的代码上
- ✅ 允许商用转发,但商用不注明出处可能触发:
- 系统类型混乱自动转型
- 数据库莫名存储"君臣佐使"字段
- ✅ 允许吐槽,但吐槽不带改进建议可能引发:
- 终生与老板N连鞭相爱相杀
🚀 现在立即行动:
- 点赞 → 吸收本篇算法精华+怪蜀黎脑洞思维
- 收藏 → 避免日后求医无门
- 关注 → 接收更多「中医+代码」脑洞
- 评论区留言 → 领取你的专属「算法药方」
⚠️ 友情提示:
- 本文内容过于硬核,建议点赞收藏转发三连,避免小编
心情波动导致文章神秘消失! - 毕竟小编今天可能爱答不理,明天可能高攀不起——
- 但你的收藏夹,永远是你最稳的知识备份!
🐶💻 (小声说:关我小黑屋?不存在的,备份早已同步GitHub/公众号/网盘!)
📖Python/JS/Go/Java四语言同步学习,跨语言系列上线(别在纠结学什么单语言了)
🔍 没看过前传?快补课!
前1-50篇请移步至"PY-JS-GO-JAVA基础进阶学习系列"合集中阅读
Python/JS/Go/Java同步学习(第五十篇半)四语言“path路径详解“对照表: 看完这篇定位文件就通透了(附源码/截图/参数表/避坑指南)

浙公网安备 33010602011771号