Go基础编程实践(六)—— 文件
检查文件是否存在
在此程序同目录下创建log.txt文件,以检测。
package main
import (
"os"
"fmt"
)
func main() {
if _, err := os.Stat("log.txt"); err == nil {
fmt.Println("Log.txt file exists")
}
}
检查文件是否不存在
package main
import (
"os"
"fmt"
)
func main() {
// IsNotExist函数定义:func IsNotExist(err error) bool
// 返回一个布尔值说明该错误是否表示一个文件或目录不存在
if _, err := os.Stat("log.txt"); os.IsNotExist(err) {
fmt.Println("Log.txt file does not exist")
} else {
fmt.Println("Log.txt file exists")
}
}
读取文件内容
在此程序同目录下创建name.txt文件,以检测。
package main
import (
"io/ioutil"
"fmt"
)
func main() {
contentBytes, err := ioutil.ReadFile("name.txt")
if err == nil {
// ReadFile返回[]byte
fmt.Println(string(contentBytes))
}
}
写入文件
在此程序同目录下创建hello_world文件。
package main
import (
"io/ioutil"
"fmt"
)
func main() {
hello := "Hello, World"
// WriteFile接受三个参数,要写入的文件名,写入的[]byte,以及写入权限
err := ioutil.WriteFile("hello_world", []byte(hello), 0644)
if err != nil {
fmt.Println(err)
}
}
创建临时文件
package main
import (
"io/ioutil"
"fmt"
)
func main() {
helloWorld := "Hello, World"
// TempFile定义:func TempFile(dir, prefix string) (f *os.File, err error)
// 在dir目录下创建一个新的、使用prefix为前缀的临时文件,
// 以读写模式打开该文件并返回os.File指针。
file, err := ioutil.TempFile("", "hello_world_temp")
if err != nil {
panic(err)
}
// defer os.Remove(file.Name())
if _, err := file.Write([]byte(helloWorld)); err != nil {
panic(err)
}
fmt.Println(file.Name())
}
计算文件行数
在程序同目录下创建"names.txt"文件,随便写几行字。
package main
import (
"os"
"bufio"
"fmt"
)
func main() {
file, _ := os.Open("names.txt")
fileScanner := bufio.NewScanner(file)
lineCount := 0
for fileScanner.Scan() {
lineCount++
}
defer file.Close()
fmt.Println(lineCount)
}
读取文件特定行
package main
import (
"os"
"bufio"
"fmt"
)
func main() {
fmt.Println(readLine(2))
}
func readLine(lineNumber int) string {
file, _ := os.Open("names.txt")
fileScanner := bufio.NewScanner(file)
lineCount := 0
for fileScanner.Scan() {
if lineCount == lineNumber {
return fileScanner.Text()
}
lineCount++
}
defer file.Close()
return ""
}
比较两个文件的内容
package main
import (
"fmt"
"io/ioutil"
"bytes"
)
func main() {
one, err := ioutil.ReadFile("one.txt")
if err != nil {
panic(err)
}
two, err2 := ioutil.ReadFile("two.txt")
if err2 != nil {
panic(err2)
}
// Equal返回bool值
same := bytes.Equal(one, two)
fmt.Println(same)
}
删除文件
package main
import "os"
func main() {
err := os.Remove("new.txt")
if err != nil {
panic(err)
}
}
复制或移动文件
package main
import (
"os"
"io"
)
func main() {
original, err := os.Open("original.txt")
if err != nil {
panic(err)
}
defer original.Close()
original_copy, err2 := os.Create("copy.txt")
if err2 != nil {
panic(err2)
}
defer original_copy.Close()
// Copy(1, 2) -> 把2拷贝到1
_, err3 := io.Copy(original_copy, original)
if err3 != nil {
panic(err3)
}
}
// 移动文件:拷贝之后利用os.Remove()删除原文件
重命名文件
package main
import "os"
func main() {
os.Rename("old.txt", "new.txt")
}
删除目录及文件
package main
import (
"os"
"fmt"
)
func main() {
// Remove无法删除非空文件夹,RemoveAll可以
err := os.RemoveAll("hello")
if err != nil {
panic(err)
}
}
列出目录下所有文件
创建一个hello文件夹,在文件夹内创建两个文件,main文件和hello文件夹并列。
.
├── hello
│ ├── 1.txt
│ └── 2.txt
└── main.go
package main
import (
"io/ioutil"
"fmt"
)
func main() {
files, err := ioutil.ReadDir("hello")
if err != nil {
panic(err)
}
for _, f := range files {
fmt.Println(f.Name())
}
}
Go基础编程实践(六)—— 文件的更多相关文章
- Go基础编程实践(九)—— 网络编程
下载网页 package main import ( "io/ioutil" "net/http" "fmt" ) func main() ...
- Go基础编程实践(十)—— 数据库
从数据库中读取数据 在http://sqlitebrowser.org/下载sqlite3可视化工具,在本main.go同目录下创建personal.db数据库,创建表如下: package main ...
- Go基础编程实践(八)—— 系统编程
捕捉信号 // 运行此程序,控制台将打印"Waiting for signal" // 按Ctrl + C 发送信号以关闭程序,将发生中断 // 随后控制台依次打印"Si ...
- Go基础编程实践(七)—— 并发
同时运行多个函数 观察常规代码和并发代码的输出顺序. // 常规代码,顺序执行,依次输出 package main import ( "fmt" "time" ...
- Go基础编程实践(五)—— 错误和日志
自定义错误类型 Go中可以使用errors.New()创建错误信息,也可以通过创建自定义错误类型来满足需求.error是一个接口类型,所有实现该接口的类型都可以当作一个错误类型. // error类型 ...
- Go基础编程实践(四)—— 数组和map
数组去重 package main import "fmt" func main(){ intSlice := []int{1,5,5,5,5,7,8,6,6, 6} fmt.Pr ...
- Go基础编程实践(三)—— 日期和时间
日期和时间 package main import ( "fmt" "time" ) func main() { // 获取当前时间 current := ti ...
- Go基础编程实践(二)—— 类型转换
bool to string strconv包的FormatBool函数用于将bool转为string package main import ( "fmt" "strc ...
- Go基础编程实践(一)—— 操作字符串
修剪空格 strings包中的TrimSpace函数用于去掉字符串首尾的空格. package main import ( "fmt" "strings" ) ...
随机推荐
- 【CF241E】Flights
[CF241E]Flights 题面 洛谷 题解 对于原来的图,如果一条边不出现在\(1\)到\(n\)的路径上面,直接\(ban\)掉即可. 那么考虑一条边\(u\rightarrow v\),一定 ...
- 为arm-linux开发板挂载基于nfs的根文件系统
linux4.14内核,首先设置kernel的bootargs,在make menuconfig中有三种方式来配置: 第一种方式为如果uboot中设置了bootargs环境变量,就采用uboot的bo ...
- shell 判断操作系统
#!/bin/sh a=`uname -a` b="Darwin" c="centos" d="ubuntu" if [[ $a =~ $b ...
- js限制输入数字能输入小数点,js定义数组,js往数组中添加数据,js将字符型转为数字型,除法结果保留两位小数——js小测:计算比赛得分
一个朋友跟我说要去给某个比赛算分: 规则:去掉最低分最高分求平均分: 最近在学习大数据可视化——图谱,用到js一些东西,所以今天就用js练练 用到知识点: js限制输入数字能输入小数点,js定义数组, ...
- LSF 作业系统常用命令
LSF(Load Sharing Facility)是一个被广泛使用的作业管理系统,具有高吞吐.配置灵活的优点.通过 LSF 集中监控和调度,可以充分利用计算机的CPU.内存.磁盘等资源. bqueu ...
- HashMap多线程并发问题分析-正常和异常的rehash1(阿里)
多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问题,所以需要变成多线程的,于是,变 ...
- 第08组 Alpha冲刺(1/4)
队名 八组评分了吗 组长博客 小李的博客 作业博客 作业链接 组员1(组长) 过去两天完成了哪些任务 文字/口头描述 11月9号开小会安排alpha冲刺开始的工作,进行任务分工,具体见11.09会议记 ...
- freeNas 数据record
- pip安装yaml
1.安装:输入pip install pyyaml或者pip3 install pyyaml 2.检查是否安装成功:输入python
- Spring使用多个 <context:property-placeholder/>
Spring中报"Could not resolve placeholder"的解决方案(引入多个properties文件) 解决方案: (1) 在Spring 3.0中,可以写: ...