zoukankan      html  css  js  c++  java
  • Golang语言学习笔记(十四)

    Golang文件 目录操作

    模式 含义
    os.O_WRONLY 只写
    os.O_CREATE 创建文件
    os.O_RDONLY 只读
    os.O_RDWR 读写
    os.O_TRUNC 清空
    os.O_APPEND 追加

    perm:文件权限,一个八进制数,r(读)04,w(写)02,x(执行)01.

    package main
    
    import (
    	"fmt"
    	"io"
    	"io/ioutil"
    	"os"
    )
    
    //编写一个函数,接收两个文件路径  srcFileName, dstFileName
    
    func copy(srcFileName, dstFileName string) error {
    	byteStr, err1 := ioutil.ReadFile(srcFileName)
    	if err1 != nil {
    		return err1
    	}
    
    	err2 := ioutil.WriteFile(dstFileName, byteStr, 0666)
    	if err2 != nil {
    		return err2
    	}
    
    	return nil
    }
    
    func copyFile(srcFileName, dstFileName string) error {
    
    	srcfile, err1 := os.Open(srcFileName)
    	dstfile, err2 := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
    	if err1 != nil {
    		return err1
    	}
    	if err2 != nil {
    		return err2
    	}
    
    	var tempSlice = make([]byte, 128)
    	for {
    		n1, e1 := srcfile.Read(tempSlice)
    		_, e2 := dstfile.Write(tempSlice[:n1])
    		if e1 != io.EOF {
    			break
    		}
    		if e1 != nil {
    			return e1
    		}
    		if e2 != nil {
    			return e2
    		}
    	}
    
    	return nil
    }
    
    func main() {
    	/*
    		读取文件:
    
    			一、读取文件(方法1)
    				1.只读方式打开文件 file, err := os.Open()
    
    				2.读取文件 file.Read()
    
    				3.关闭文件流 defer file.Close()
    
    			二、读取文件(方法2) bufio读取文件
    
    				1.只读方式打开文件 file, err := os.Open()
    
    				2.创建reader对象 reader := bufio.NewReader(file)
    
    				3.ReadString读取文件 line, err := reader.ReadString('
    ')
    
    				4.关闭文件流 defer file.Close()
    
    			三、读取文件(方法3)ioutil 读取文件
    
    				打开关闭文件的方法都风钻工好了,只需要一句话就可以读取
    				ioutil.ReadFile("./main.go")
    
    		写入文件:
    			一、写入文件(方法1)
    				1.打开文件 file, err := os.OpenFile("./test.txt",os.O_CREATE|os.O_RDWR,0666)
    
    				2.写入文件
    					file.Write([]byte(str)) //写入字节切片数据
    					file.WriteString("直接写入的字符串数据")//直接写入字符串数据
    
    				3.关闭文件流 file.Close()
    
    			二、写入文件(方法2)bufio写入文件
    
    				1.打开文件 file, err := os.OpenFile("./test.txt",os.O_CREATE|os.O_RDWR,0666)
    
    				2.创建writer对象 writer := bufio.NewWriter(file)
    
    				3.将数据先写入缓存 writer.WriteString("hello golang 
    ")
    
    				4.将缓存中的内容写入文件  writer.Flush()
    
    				5.关闭文件流 file.Close()
    
    			三、写入文件(方法3)ioutil写入文件
    
    				str := "hello golang"
    				err := ioutil.WriteFile("./test.txt",[]byte(str),0666)
    
    		文件重命名:
    
    			err := os.Rename("C:/test1.txt", "D:/test1.txt")//只能同盘操作
    
    		复制文件:
    
    			一、方法1
    				input, err := ioutil.ReadFile(srcFileName)
    
    				err = iotil.WriteFile(dsFileName, input, 0644)
    
    			二、方法2
    
    				source, _ := os.Open(srcFileName)
    
    				destination, _ := os.OpenFile(dsFileName, os.O_CREATE|os.O_WRONLY, 0666)
    
    				n, err := source.Read(buf)
    
    				destination.Write(buf[:n])
    		创建目录:
    
    			err := os.Mkdir("./abc",0666)
    
    			err := os.MkdirAll("dir1/dir2/dir3",0666)//创建多级目录
    
    		删除目录和文件:
    
    			err := os.Remove("t.txt")
    
    			err := os.RemoveAll("aaa")
    
    	*/
    
    	//读取文件
    	//只读方式打开当前目录下的main.go文件
    	// file, err := os.Open("./test.txt") //文件路径可以是相对路径也可以是绝对路径
    	// defer file.Close()                 //必须关闭文件流
    
    	// if err != nil {
    	// 	fmt.Println(err)
    	// 	return
    	// }
    
    	// //操作文件
    	// fmt.Println(file) //&{0xc00007e780}文件地址
    	// //file.Read()读取文件里面的内容
    	// var strSlice []byte
    	// var tempSlice = make([]byte, 128)
    	// for {
    	// 	n, err := file.Read(tempSlice)
    	// 	if err == io.EOF { //表示读取完毕
    	// 		fmt.Println("读取完毕")
    	// 		break
    	// 	}
    	// 	if err != nil {
    	// 		fmt.Println("读取文件失败")
    	// 		return
    	// 	}
    	// 	// fmt.Printf("读取到了%v个字节
    ", n)
    	// 	strSlice = append(strSlice, tempSlice[:n]...)
    	// }
    
    	// fmt.Println(string(strSlice))
    
    	//bufio.NewReader(file)方法
    	// var fileStr string
    	// reader := bufio.NewReader(file)
    
    	// for {
    	// 	str, err := reader.ReadString('
    ') //表示一次读取一行
    	// 	if err == io.EOF {
    	// 		fileStr += str
    	// 		break
    	// 	}
    	// 	if err != nil {
    	// 		fmt.Println(err)
    	// 		return
    	// 	}
    	// 	fileStr += str
    	// }
    	// fmt.Println(fileStr)
    
    	//ioutil读取文件
    	// byteStr, err := ioutil.ReadFile("./test.txt")
    	// if err != nil {
    	// 	fmt.Println(err)
    	// 	return
    	// }
    	// fmt.Println(string(byteStr))
    
    	//写入文件
    
    	//打开文件
    	// file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    	// defer file.Close()
    
    	// if err != nil {
    	// 	fmt.Println(err)
    	// 	return
    	// }
    
    	// //写入文件 file.WriteString()
    	// // for i := 0; i < 10; i++ {
    	// // 	file.WriteString("写入的字符串" + strconv.Itoa(i) + "
    ")
    	// // }
    
    	// //写入文件file.Write()
    	// // var str = "直接写入的字符串"
    	// // file.Write([]byte(str))
    
    	//bufio
    
    	// writer := bufio.NewWriter(file)
    
    	// // writer.WriteString("hello golang")//将数据先写入缓存
    	// for i := 0; i < 10; i++ {
    	// 	writer.WriteString("writer写入的字符串" + strconv.Itoa(i) + "
    ")
    	// }
    
    	// writer.Flush() //将缓存中的内容写入文件
    
    	//ioutil
    	// str := "hello golang"
    	// err := ioutil.WriteFile("./test.txt", []byte(str), 0666)
    
    	// if err != nil {
    	// 	fmt.Println("Write file failed, err: ", err)
    	// 	return
    	// }
    
    	//复制文件
    
    	//ioutil
    	// byteStr, err1 := ioutil.ReadFile("./test.txt")
    	// if err1 != nil {
    	// 	fmt.Println(err1)
    	// 	return
    	// }
    
    	// err2 := ioutil.WriteFile("C:/tmp/test.txt", byteStr, 0666)
    	// if err2 != nil {
    	// 	fmt.Println(err2)
    	// 	return
    	// }
    
    	// fmt.Println("文件复制成功")
    	//封装成一个复制文件的方法
    	// srcFileName := "./test.txt"
    	// dstFileName := "C:/tmp/golang.txt"
    
    	// //ioutil
    	// // err := copy(srcFileName, dstFileName)
    
    	// //file.Read() file.Write()
    	// err := copyFile(srcFileName, dstFileName)
    	// if err != nil {
    	// 	fmt.Println(err)
    	// 	return
    	// }
    	// fmt.Println("文件复制成功")
    
    	//创建文件
    	// err := os.Mkdir("./abc", 0666)
    	// err := os.MkdirAll("dir1/dir2/dir3", 0666) //创建多级目录
    	// if err != nil {
    	// 	fmt.Println(err)
    	// }
    
    	//删除文件
    
    	//删除一个文件
    	// err := os.Remove("test.txt")
    
    	//删除一个目录
    	// err := os.RemoveAll("abc")
    
    	//一次删除多个目录
    	// err := os.RemoveAll("dir1")
    
    	// if err != nil {
    	// 	fmt.Println(err)
    	// 	return
    	// }
    
    	//重命名
    	err := os.Rename("C:/tmp/golang.txt", "C:/tmp/test.txt")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println("重命名成功")
    
    }
    
    

    Golang语言学习笔记系列都学习自itying的大地老师,非常感谢!!!

  • 相关阅读:
    微信小程序(三)-事件绑定
    微信小程序(二)-语法学习
    微信小程序(一)-工具创建和结构配置说明 Stable Build
    ============================================ 微信小程序开发学习
    Vue学习笔记-Vue.js-2.X 学习(七)===>脚手架Vue-CLI(路由Router)
    Vue学习笔记-Vue.js-2.X 学习(六)===>脚手架Vue-CLI(项目说明-Babel)
    Vue学习笔记-Vue.js-2.X 学习(五)===>脚手架Vue-CLI(PyCharm)
    linux打包压缩命令汇总
    js中函数之函数名带括号与不带括号的区别
    $_FILES error(笔记)
  • 原文地址:https://www.cnblogs.com/hanajiang/p/13826604.html
Copyright © 2011-2022 走看看