文件操作

文件操作

基本操作

https://studygolang.com/pkgdoc go语言文档库

package main

import (
	"fmt"
	"os"
)

func main() {
	//打开文件
	file, err := os.Open("C:/Users/小子/Desktop/面向对象/文件操作/test.txt")
	if err != nil {
		fmt.Println("open file err= ",err)
	}
	//打开文件看内容,就是一个指针*file
	fmt.Printf("file=%v",file)
	//关闭文件 
	err =file.Close()
	if err != nil{
		fmt.Println("close file err=",err)
	}

}

读取文件内容

文件大使用这个方式


package main

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

func main() {
	//打开文件
	file, err := os.Open("C:/Users/小子/Desktop/面向对象/文件操作/test.txt")
	if err != nil {
		fmt.Println("open file err= ",err)
	}
	//当函数退出的时候,要及时关闭file否则会内存泄漏
	defer file.Close()
	//const (defaultBufsize=4096)//默认的缓冲区为4096
	reader := bufio.NewReader(file)
	//循环读取文件内容
	for{
		str,_ := reader.ReadString('\n')//读到一行就结束
		if err ==io.EOF{
			//io.EOF表示读到文件的末尾
			break
		}
		fmt.Print(str)
	}


}

文件小使用这个方式

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	file := "C:/Users/小子/Desktop/面向对象/文件操作/test.txt"
	content,err := ioutil.ReadFile(file)
	if err !=nil{
		fmt.Println("read err=",err)
	}
	fmt.Println(string(content))
}

写文件

package main

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

func main() {

	//创建一个新文件.写入内容
	filePath :="C:/Users/小子/Desktop/面向对象/文件操作/test.txt"
	file, err := os.OpenFile(filePath,os.O_WRONLY|os.O_CREATE,0666)
	if err != nil{
		fmt.Println("err file = ",err)
		return
	}
	defer file.Close()
	//写内容
	str :="hello world!"
	//写入时,使用带缓存的*writer
	writer := bufio.NewWriter(file)
	for i:=0;i<5;i++{
		writer.WriteString(str)
	}
	//因为witer是带缓存,因此调用WriteString时内容先写到缓存中,所以调用flush方法,真正写入到文件中,否则文件中会丢失数据
	writer.Flush()


}
  • 打开一个存在的文件,将原来的内容覆盖成新的内容

    func main() {
    
    	//创建一个新文件.写入内容
    	filePath :="C:/Users/小子/Desktop/面向对象/文件操作/test.txt"
    	file, err := os.OpenFile(filePath,os.O_WRONLY|os.O_TRUNC,0666)
    	if err != nil{
    		fmt.Println("err file = ",err)
    		return
    	}
    	defer file.Close()
    	//写内容
    	str :="hello world!我是zc\n"
    	//写入时,使用带缓存的*writer
    	writer := bufio.NewWriter(file)
    	for i:=0;i<10;i++{
    		writer.WriteString(str)
    	}
    	//因为witer是带缓存,因此调用WriteString时内容先写到缓存中,所以调用flush方法,真正写入到文件中,否则文件中会丢失数据
    	writer.Flush()
    
    }
    //O_TRUNC覆盖原来的内容
    
  • 打开文件,在原来的内容上追加内容

    os.O_APPEND
    
  • 打开文件,将原来的内容显示出来,并追加东西

    func main() {
    
    	//创建一个新文件.写入内容
    	filePath :="C:/Users/小子/Desktop/面向对象/文件操作/test.txt"
    	file, err := os.OpenFile(filePath,os.O_RDWR|os.O_APPEND,0666)
    	if err != nil{
    		fmt.Println("err file = ",err)
    		return
    	}
    	defer file.Close()
    	//先将文件读取出来,显示在终端
    	reader := bufio.NewReader(file)
    	for {
    		str, err :=reader.ReadString('\n')
    		if err ==io.EOF{
    			break
    
    		}
    		fmt.Println(str)
    	}
    	//写内容
    	str :="1732984729384\n"
    	//写入时,使用带缓存的*writer
    	writer := bufio.NewWriter(file)
    	for i:=0;i<10;i++{
    		writer.WriteString(str)
    	}
    	//因为witer是带缓存,因此调用WriteString时内容先写到缓存中,所以调用flush方法,真正写入到文件中,否则文件中会丢失数据
    	writer.Flush()
    
  • 将一个文件的内容,写入到另一个文件中

    package main
    
    import (
    	"fmt"
    	"io/ioutil"
    )
    
    func main() {
    
    	file1Path := "C:/Users/小子/Desktop/面向对象/文件操作/test.txt"
    	file2Path := "C:/Users/小子/Desktop/面向对象/文件操作/1.txt"
    	data,err := ioutil.ReadFile(file1Path)
    	if err !=nil{
    		fmt.Println(err)
    		return
    
    	}
    	err = ioutil.WriteFile(file2Path,data,0666)
    	if err !=nil{
    		fmt.Println(err)
    	}
    }
    
  • 判断文件是否存在

    func PathExists(path string)(bool,error){
    	_,err:=os.Stat(path)
    	if err !=nil{
    		return true,nil
    	}
    	if os.IsNotExist(err){
    		return false,nil
    	}
    	return false,err
    
    }
    
  • 拷贝文件(图片/视频)

    package main
    import (
    	"fmt"
    	"os"
    	"io"
    	"bufio" 
    )
    //自己编写一个函数,接收两个文件路径 srcFileName dstFileName
    func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {
     
    	srcFile, err := os.Open(srcFileName)
    	if err != nil {
    		fmt.Printf("open file err=%v\n", err)
    	}
    	defer srcFile.Close()
    	//通过srcfile ,获取到 Reader
    	reader := bufio.NewReader(srcFile)
     
    	//打开dstFileName
    	dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY | os.O_CREATE, 0666)
    	if err != nil {
    		fmt.Printf("open file err=%v\n", err)
    		return 
    	}
     
    	//通过dstFile, 获取到 Writer
    	writer := bufio.NewWriter(dstFile)
    	defer dstFile.Close()
     
    	return io.Copy(writer, reader)
    }
     
    func main() {
    	//将d:/flower.jpg 文件拷贝到 e:/abc.jpg
     
    	//调用CopyFile 完成文件拷贝
    	srcFile := "d:/flower.jpg"
    	dstFile := "e:/abc.jpg"
    	_, err := CopyFile(dstFile, srcFile)
    	if err == nil {
    		fmt.Printf("拷贝完成\n")
    	} else {
    		fmt.Printf("拷贝错误 err=%v\n", err)
    	}	
    }
    
posted @ 2021-02-02 01:02  小子,你摊上事了  阅读(52)  评论(0编辑  收藏  举报