文件操作

一、普通方式

1、使用普通方式读取

package main

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

// 读取文件操作
// 读取文件使用的是os包

func ReadFileInfo(){
	// func os.Open(name string) (*os.File, error)
	// 打开文件
	file,err := os.Open(`E:projectsGoProjectsrcMyGo	estmain.go`)
	// 关闭文件
	
	if err != nil{
		log.Fatalln("打开文件失败,错误信息:",err.Error())
		return
	}
	defer file.Close()

	// 读取文件
	//func (*os.File).Read(b []byte) (n int, err error)
	var b [128]byte
	for{
	n,err:= file.Read(b[:])
	if err != nil{
		if err == io.EOF{
			break
		}
		log.Fatalln("读取文件失败: ",err.Error())
		return	
	}
	fmt.Print(string(b[:n]))
}	
}
func main(){
	ReadFileInfo()
}

2、使用普通方式写入

package main

import (
	"log"
	"os")


func FileWrite() {
	//func os.OpenFile(name string, flag int, perm os.FileMode) (*os.File, error)
	f, err := os.OpenFile(`E:projectsGoProjectsrcMyGo	est2log.txt`,os.O_CREATE|os.O_WRONLY,0777)
	if err != nil{
		log.Fatalln("打开文件失败: ",err.Error())
	}

	defer f.Close()
	//func (*os.File).WriteString(s string) (n int, err error)
	_,err = f.WriteString("Hello Go!!!")
	if err != nil{
		log.Fatalln("写入失败: ", err.Error())
		
	}

}

func main(){
	FileWrite()
}

二、使用buifo

1、使用bufio读取

bufio只是在原先的基础上做了一层封装,类似Java的io操作

package main

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

// 读取文件操作
// 读取文件使用的是os包

func ReadFileInfoBuf(){
	// func os.Open(name string) (*os.File, error)
	// 打开文件
	file,err := os.Open(`E:projectsGoProjectsrcMyGo	est1main.go`)
	// 关闭文件
	
	if err != nil{
		log.Fatalln("打开文件失败,错误信息:",err.Error())
		return
	}
	defer file.Close()

	//func bufio.NewReader(rd io.Reader) *bufio.Reader
	// os.File实现了io.Reader接口里面的方法。
	reader := bufio.NewReader(file)

	// 循环读取
	var FLAG bool  = false
	for{
		//func (*bufio.Reader).ReadString(delim byte) (string, error)
		s, err := reader.ReadString('
')
		if err != nil{
			if err == io.EOF{
				//fmt.Println("文件读取完毕")
				FLAG = true
			}else{
				log.Fatalln("文件读取失败: ",err.Error())
				return
			}
		}

		fmt.Print(s)
		if FLAG{
			break
		}
	}
}

func main(){
	ReadFileInfoBuf()
}

2、写入文件

package main

import (
	"bufio"	
	"os"
	"log"
)


func WriteFileByBufio() {

	f,err := os.OpenFile(`E:projectsGoProjectsrcMyGo	est3log.txt`,os.O_CREATE|os.O_WRONLY,0777)
	if err != nil{
		log.Fatalln("打开文件失败: ",err.Error())
	}

	defer f.Close()
	//func bufio.NewWriter(w io.Writer) *bufio.Writer
	f1 := bufio.NewWriter(f)

	_,err = f1.WriteString("你好,go")
	if err != nil{
		log.Fatalln("写入失败",err.Error())
	}
	// 写完一定要刷新缓存
	f1.Flush()

}

func main(){
	WriteFileByBufio()
}

三、使用ioutil

1、读取

package main

import (
	"fmt"
	"io/ioutil"
        "log"
)
func ReadFileByioutil(){
	//func ioutil.ReadFile(filename string) ([]byte, error)
	b , err := ioutil.ReadFile(`E:projectsGoProjectsrcMyGo	est1main.go`)
	if err != nil{
		log.Fatalln("读取错误: ",err.Error())
	}
	fmt.Print(string(b))
}
func main(){
	//ReadFileInfoBuf()
	ReadFileByioutil()
}

2、写入文件

package main

import (
	"io/ioutil"
	"log"
)


func WriteFile() {
	//func ioutil.WriteFile(filename string, data []byte, perm os.FileMode) error
	err := ioutil.WriteFile(`E:projectsGoProjectsrcMyGo	est4log.txt`,[]byte("你好,go"),0777)
	if err != nil{
		log.Fatalln("写入失败: ",err.Error())
		return
	}
}

func main(){
	WriteFile()
}

四、使用bufio读取命令行输入

package main

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


func ReadConsole() {
	
	fmt.Print("请输入数据: ")
	reader := bufio.NewReader(os.Stdin)
	s,err := reader.ReadString('
')
	if err != nil{
		fmt.Println("读取错误")
	}

	fmt.Println("输入为: ", s)

	
}

func  main(){
	ReadConsole()
}
记录学习和生活的酸甜苦辣.....哈哈哈
原文地址:https://www.cnblogs.com/yjt1993/p/14618467.html