正在从服务器偷取页面 . . .

file


文件

package main

import (
 "fmt"
 "io"
 "os"
)

// file operate
// open and cloese the file

func main() {
 // only read to open the file
 // file, err := os.Open("../README.md")
 // if err != nil {
 //  fmt.Println("open the file failed", err)
 //  return
 // }
 // // file close
 // file.Close()
 // fmt.Println("open the file success")

 // // read file
 // // review slice
 // // init a slice
 // var SLI []int
 // fmt.Println(SLI)
 // // init and assign
 // SLIASS := []int{1024}
 // fmt.Println(SLIASS)
 // // array
 // arr := [3]int{996, 1024, 520}
 // fmt.Println(arr)
 // // array and slice
 // fmt.Println(len(arr))
 // fmt.Println(cap(arr))
 // fmt.Println(len(SLI))
 // fmt.Println(cap(SLI))
 // // low and high
 // LH := [4]int{717, 996, 1024, 666}
 // // low
 // // high
 // fmt.Println(LH[1:])
 // fmt.Println(LH[:1])
 // fmt.Println(LH[:])
 // // out of range
 // // fmt.Println(LH[996])
 // // full slice
 // // low high max
 // FULLSLI := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
 // // 2,3
 // fmt.Println(FULLSLI[1:3:5])
 // // use make to init a slice
 // MSLI := make([]int, 4, 10)
 // fmt.Println(MSLI)
 // fmt.Println(len(MSLI))
 // fmt.Println(cap(MSLI))
 // // judge a slice are not a nil
 // judge := make([]int, 0, 4)
 // jud := []int{996}
 // if judge != nil {
 //  fmt.Println("this slice is not nil")
 // } else {
 //  fmt.Println("this slice is nil")
 // }
 // if jud != nil {
 //  fmt.Println("this slice is not nil")
 // } else {
 //  fmt.Println("this slice is nil")
 // }
 // // traverse
 // for i := 0; i < len(FULLSLI); i++ {
 //  fmt.Println(FULLSLI[i])
 // }
 // for index, value := range FULLSLI {
 //  fmt.Println(index, value)
 // }

 // read file
 // 它接收一个字节切片,返回读取的字节数和可能的具体错误,读到文件末尾时会返回0和io.EOF。 举个例子:
 // only read to open the file
 // 只读方式打开当前目录下的main.go文件
 file, err := os.Open("../README.md")
 if err != nil {
  fmt.Println("open file failed!, err:", err)
  return
 }
 defer file.Close()
 // 使用Read方法读取数据
 var tmp = make([]byte, 256)
 n, err := file.Read(tmp)
 if err == io.EOF {
  fmt.Println("文件读完了")
  return
 }
 if err != nil {
  fmt.Println("read file failed, err:", err)
  return
 }
 fmt.Printf("读取了%d字节数据\n", n)
 fmt.Println(string(tmp[:n]))
}

循环读取

package mian

import (
 "fmt"
 "io"
 "os"
)

// for 循环读取文件

func main() {
 // 只读方式打开当前目录下的main.go文件
 file, err := os.Open("../README.md")
 if err != nil {
  fmt.Println("open file failed!, err:", err)
  return
 }
 defer file.Close()
 // 循环读取文件
 var content []byte
 var tmp = make([]byte, 128)
 for {
  n, err := file.Read(tmp)
  if err == io.EOF {
   fmt.Println("文件读完了")
   break
  }
  if err != nil {
   fmt.Println("read file failed, err:", err)
   return
  }
  content = append(content, tmp[:n]...)
 }
 fmt.Println(string(content))
}

bufio 按行读取示例

package main

import (
 "bufio"
 "fmt"
 "io"
 "os"
)

// bufio按行读取示例
func main() {
 file, err := os.Open("../README.md")
 if err != nil {
  fmt.Println("open file failed, err:", err)
  return
 }
 defer file.Close()
 reader := bufio.NewReader(file)
 for {
  line, err := reader.ReadString('\n') //注意是字符
  if err == io.EOF {
   if len(line) != 0 {
    fmt.Println(line)
   }
   fmt.Println("文件读完了")
   break
  }
  if err != nil {
   fmt.Println("read file failed, err:", err)
   return
  }
  fmt.Print(line)
 }
}

read all file

package main

import (
 "fmt"
 "io/ioutil"
)

// read all file

func main() {
 content, err := ioutil.ReadFile("../README.md")
 if err != nil {
  fmt.Println("read file failed", err)
  return
 }
 fmt.Println(string(content))
}

write

package main

import (
 "fmt"
 "os"
)

// write to file
func main() {
 file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
 if err != nil {
  fmt.Println("open file failed, err:", err)
  return
 }
 defer file.Close()
 str := "hello 沙河"
 file.Write([]byte(str))       //写入字节切片数据
 file.WriteString("hello 小王子") //直接写入字符串数据
}

文章作者: 周靖
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 周靖 !
📣 评论
  目录