标签:log pen blog defer sre bsp 处理 清空 red
准备一个文件 imooc.txt
hello world!
一、使用 io/ioutil 包
定义一个 check 函数
func check(err error) { if err != nil { fmt.Println(err) } }
1. 读文件(使用 ReadFile 或 ReadAll)
// ReadFile 直接读文件=> 切片序列 func demo_read_file(title string) { b, err := ioutil.ReadFile(title) if err != nil { fmt.Println(err) } fmt.Printf("ReadFile:%q\n", string(b)) } // ReadAll 读取一个 io.Reader,返回字节序列 func demo_read_all(title string) { f, err := os.Open(title) check(err) defer f.Close() // 读取整个 Reader流 b, err := ioutil.ReadAll(f) check(err) fmt.Printf("ReadAll: %q\n", string(b)) }
输出
ReadFile:"hello world!" ReadAll: "hello world!"
2. 写文件(使用 WriteFile)
// WriteFile 直接将切片序列=> 文件 func demo_write_file() { // 如果文件不存在,则创建一个文件(有权限的话);否则清空文件。 err := ioutil.WriteFile("imooc.txt", []byte("hello write!"), 0644) if err != nil { fmt.Println(err) } }
再读一遍,输出:
ReadFile:"hello write!"
二、使用 os包
1. 打开文件
// Open 以O_RDONLY 的方式来打开文件 func demo_open() { f, err := os.Open("imooc.txt") if err != nil { fmt.Println(err) } defer f.Close() fmt.Println(f.Fd()) } // OpenFile 以自定义的方法打开文件 func demo_open_file() { f, err := os.OpenFile("imooc.txt", os.O_RDWR|os.O_CREATE, 0775) if err != nil { fmt.Println(err) } defer f.Close() fmt.Println(f.Fd()) }
输出
3 3
2. 读方法
// 读方法 func demo_read() { f, err := os.OpenFile("imooc.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0775) check(err) defer f.Close() buf := make([]byte, 2) _, err = f.Read(buf) check(err) fmt.Printf("Read1: %q\n", string(buf)) // 第一个参数为偏移的大小;第二个位置为 0,1,2,分别代表开头,当前,结尾 f.Seek(4, 1) _, err = f.Read(buf) check(err) fmt.Printf("Read2: %q\n", string(buf)) r := bufio.NewReader(f) // 读取指定位数 b, err := r.Peek(4) check(err) fmt.Printf("Peek: %q\n", string(b)) }
输出
Read1: "he" Read2: "wr" Peek: "ite!"
3. 写方法
// 写方法 func demo_write() { f, err := os.Create("imooc.bak") check(err) defer f.Close() // b := []byte{115, 111, 109, 101, 10} b := []byte("你好\n") // 如果文件存在,则清空文件。在打开的一个文件中,内容是往后添加,直到Close 该文件 n, err := f.Write(b) check(err) fmt.Printf("Write: %d\n", n) n, err = f.WriteString("我们啊\n") check(err) fmt.Printf("WriteString: %d\n", n) f.Sync() w := bufio.NewWriter(f) n, err = w.WriteString("buffered\n") check(err) fmt.Printf("bufio WriteString: %d\n", n) // 必须刷新,才能看到文件内容 w.Flush() }
再读一遍,输出
Write: 7 WriteString: 10 bufio WriteString: 9 ReadFile:"你好\n我们啊\nbuffered\n"
三、整个文件
// demo_file.go package main import ( "bufio" "fmt" "io/ioutil" "os" ) func check(err error) { if err != nil { fmt.Println(err) } } // ---- 使用io/ioutil ---- // ReadFile 直接读文件=> 切片序列 func demo_read_file(title string) { b, err := ioutil.ReadFile(title) if err != nil { fmt.Println(err) } fmt.Printf("ReadFile:%q\n", string(b)) } // WriteFile 直接将切片序列=> 文件 func demo_write_file() { // 如果文件不存在,则创建一个文件(有权限的话);否则清空文件。 err := ioutil.WriteFile("imooc.txt", []byte("hello write!"), 0644) if err != nil { fmt.Println(err) } } // ReadAll 读取一个 io.Reader,返回字节序列 func demo_read_all(title string) { f, err := os.Open(title) check(err) defer f.Close() // 读取整个 Reader流 b, err := ioutil.ReadAll(f) check(err) fmt.Printf("ReadAll: %q\n", string(b)) } // ---- 使用os ---- // Open 以O_RDONLY 的方式来打开文件 func demo_open() { f, err := os.Open("imooc.txt") if err != nil { fmt.Println(err) } defer f.Close() fmt.Println(f.Fd()) } // OpenFile 以自定义的方法打开文件 func demo_open_file() { f, err := os.OpenFile("imooc.txt", os.O_RDWR|os.O_CREATE, 0775) if err != nil { fmt.Println(err) } defer f.Close() fmt.Println(f.Fd()) } // 读方法 func demo_read() { f, err := os.OpenFile("imooc.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0775) check(err) defer f.Close() buf := make([]byte, 2) _, err = f.Read(buf) check(err) fmt.Printf("Read1: %q\n", string(buf)) // 第一个参数为偏移的大小;第二个位置为 0,1,2,分别代表开头,当前,结尾 f.Seek(4, 1) _, err = f.Read(buf) check(err) fmt.Printf("Read2: %q\n", string(buf)) r := bufio.NewReader(f) // 读取指定位数 b, err := r.Peek(4) check(err) fmt.Printf("Peek: %q\n", string(b)) } // 写方法 func demo_write() { f, err := os.Create("imooc.bak") check(err) defer f.Close() // b := []byte{115, 111, 109, 101, 10} b := []byte("你好\n") // 如果文件存在,则清空文件。在打开的一个文件中,内容是往后添加,直到Close 该文件 n, err := f.Write(b) check(err) fmt.Printf("Write: %d\n", n) n, err = f.WriteString("我们啊\n") check(err) fmt.Printf("WriteString: %d\n", n) f.Sync() w := bufio.NewWriter(f) n, err = w.WriteString("buffered\n") check(err) fmt.Printf("bufio WriteString: %d\n", n) // 必须刷新,才能看到文件内容 w.Flush() } func main() { // demo_read_file("imooc.txt") // demo_read_all("imooc.txt") // demo_write_file() // demo_read_file("imooc.txt") // demo_open() // demo_open_file() // demo_read() demo_write() demo_read_file("imooc.bak") }
四、os 包的其他方法(os)
func IsExist(err error) bool func IsNotExist(err error) bool func Mkdir(name string, perm FileMode) error func MkdirAll(path string, perm FileMode) error func Remove(name string) error func RemoveAll(path string) error func Rename(oldpath, newpath string) error func (m FileMode) IsDir() bool func (m FileMode) IsRegular() bool
标签:log pen blog defer sre bsp 处理 清空 red
原文地址:http://www.cnblogs.com/lemos/p/7670124.html