天天看点

文件操作

func main() {
var wireteString = "测试n"       # 定义一个输入字符串
var filename = "./output1.txt"  # 定义一个输出文件名字
var f *os.File                  # 按位去文件对象
var err1 error                  # 定义一个错误对象

# 第一种方式: 使用 io.WriteString 写入文件 
if checkFileIsExist(filename) { //如果文件存在
f, err1 = os.OpenFile(filename, os.O_APPEND, 0666) //打开文件
fmt.Println("文件存在")
    } else {
f, err1 = os.Create(filename) //创建文件
fmt.Println("文件不存在")
    }
check(err1)

# 写入文件
n, err1 := io.WriteString(f, wireteString) //写入文件(字符串)
check(err1)
fmt.Printf("写入 %d 个字节n", n)

# 第二种方式: 使用 ioutil.WriteFile 写入文件 
# 定义一个字节类型切片,内部元素是写入的字符串
var d1 = []byte(wireteString)  # 将io流写入到文件中,并且定义文件的权限
err2 := ioutil.WriteFile("./output2.txt", d1, 0666) //写入文件(字节数组)
check(err2)

# 第三种方式:  使用 File(Write,WriteString) 写入文件 
f, err3 := os.Create("./output3.txt") //创建文件
check(err3)
defer f.Close()  # 最后都会关闭文件
n2, err3 := f.Write(d1) //写入文件(字节数组) 写入的也是流,返回的是文件个数,
check(err3)
fmt.Printf("写入 %d 个字节n", n2)
n3, err3 := f.WriteString("writesn") //写入文件(字符数组)
fmt.Printf("写入 %d 个字节n", n3)
f.Sync()

# 第四种方式:  使用 bufio.NewWriter 写入文件 
w := bufio.NewWriter(f) //创建新的 Writer 对象
n4, err3 := w.WriteString("bufferedn")
fmt.Printf("写入 %d 个字节n", n4)
w.Flush()
f.Close()
}
      

场景:需要写入文件,并且不需要输出谢了多少个字符

使用了ioutil

content := []byte(tmp)  #tmp获取的输入字符串
//将指定内容写入到文件中
err1 := ioutil.WriteFile(dest, content, 0755) # dest是存储文件的名字
# 只返回一个错误对象
if err1 != nil {
fmt.Println("write error", err1)
    } else {
fmt.Printf("%v", 1)
    }
      

创建文本文件:

f,err := os.Create(fileName)
    defer f.Close()
    if err !=nil {
        fmt.Println(err.Error())
    } else {
        _,err=f.Write([]byte("要写入的文本内容"))
        checkErr(err)
    }
      

读取文件

f, err := os.OpenFile(fileName, os.O_RDONLY,0600)
    defer f.Close()
    if err !=nil {
        fmt.Println(err.Error())
    } else {
     contentByte,err=ioutil.ReadAll(f)
        checkErr(err)
fmt.Println(string(contentByte))
    }
      

OpenFile的用法

//打开方式
const (
//只读模式
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
//只写模式
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
//可读可写
O_RDWR int = syscall.O_RDWR // open the file read-write.
//追加内容
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
//创建文件,如果文件不存在
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
//与创建文件一同使用,文件必须存在
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist
//打开一个同步的文件流
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
//如果可能,打开时缩短文件
O_TRUNC int = syscall.O_TRUNC // if possible, truncate file when opened.
)