/*
读取文件:
一、读取文件(方法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('\n')
4、关闭文件流 defer file.Close()
三、读取文件(方法3)ioutil 读取文件
打开关闭文件的方法它都封装好了只需要一句话就可以读取
ioutil.ReadFile("./main.go")
写入文件:
一、写入文件(方法1)
1、打开文件 file, err := os.OpenFile("C:/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("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
2、创建writer对象 writer := bufio.NewWriter(file)
3、将数据先写入缓存 writer.WriteString("你好golang\r\n")
4、将缓存中的内容写入文件 writer.Flush()
5、关闭文件流 file.Close()
三、写入文件(方法3) ioutil 写入文件
str := "hello golang"
err := ioutil.WriteFile("C:/test.txt", []byte(str), 0666)
文件重命名:
err := os.Rename("C:/test1.txt", "D:/test1.txt") //只能同盘操作
复制文件:
一、方法1
input, err := ioutil.ReadFile(srcFileName)
err = ioutil.WriteFile(dstFileName, input, 0644)
二、方法2
source, _ := os.Open(srcFileName)
destination, _ := os.OpenFile(dstFileName, 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")
*/
package main
import (
"fmt"
"os"
)
func main() {
// 只读方式打开当前目录下的main.go文件 D:/go_demo/demo23/demo01/main.go
file, err := os.Open("./main.go")
defer file.Close() //必须得关闭文件流
if err != nil {
fmt.Println(err)
return
}
//操作文件
fmt.Println(file) //&{0xc00014a780}
}
package main
import (
"fmt"
"io"
"os"
)
/*
一、读取文件(方法1)
1、只读方式打开文件 file,err := os.Open()
2、读取文件 file.Read()
3、关闭文件流 defer file.Close()
*/
func main() {
//1、打开文件
file, err := os.Open("C:/test.txt")
defer file.Close()
if err != nil {
fmt.Println(err)
return
}
//2、读取文件里面的内容
var strSlice []byte
var tempSlice = make([]byte, 128)
for {
n, err := file.Read(tempSlice)
if err == io.EOF { //err==io.EOF表示读取完毕
fmt.Println("读取完毕")
break
}
if err != nil {
fmt.Println("读取失败")
return
}
// fmt.Printf("读取到了%v个字节\n", n)
strSlice = append(strSlice, tempSlice[:n]...) //注意写法
}
fmt.Println(string(strSlice))
}
package main
import (
"bufio"
"fmt"
"io"
"os"
)
/*
二、读取文件(方法2)bufio 读取文件
1、只读方式打开文件 file,err := os.Open()
2、创建reader对象 reader := bufio.NewReader(file)
3、ReadString读取文件 line, err := reader.ReadString('\n')
4、关闭文件流 defer file.Close()
*/
func main() {
file, err := os.Open("C:/test.txt")
defer file.Close()
if err != nil {
fmt.Println(err)
return
}
//bufio 读取文件
var fileStr string
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n') //表示一次读取以行
if err == io.EOF {
fileStr += str
break
}
if err != nil {
fmt.Println(err)
return
}
fileStr += str
}
fmt.Println(fileStr)
}
package main
import (
"fmt"
"io/ioutil"
)
// ioutil按行读取示例
func main() {
byteStr, err := ioutil.ReadFile("C:/test.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(byteStr))
}
package main
import (
"fmt"
"os"
)
/*
一、写入文件(方法1)
1、打开文件 file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
2、写入文件
file.Write([]byte(str)) //写入字节切片数据
file.WriteString("直接写入的字符串数据") //直接写入字符串数据
3、关闭文件流 file.Close()
*/
func main() {
file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
defer file.Close()
if err != nil {
fmt.Println(err)
return
}
//写如文件
// for i := 0; i < 10; i++ {
// file.WriteString("直接写入的字符串数据" + strconv.Itoa(i) + "\r\n")
// }
var str = "直接写入的字符串数据byte"
file.Write([]byte(str))
}
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
/*
二、写入文件(方法2) bufio 写入文件
1、打开文件 file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)
2、创建writer对象 writer := bufio.NewWriter(file)
3、将数据先写入缓存 writer.WriteString("你好golang\r\n")
4、将缓存中的内容写入文件 writer.Flush()
5、关闭文件流 file.Close()
*/
func main() {
file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
defer file.Close()
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
writer := bufio.NewWriter(file)
// writer.WriteString("你好golang") //将数据先写入缓存
for i := 0; i < 10; i++ {
writer.WriteString("直接写入的字符串数据" + strconv.Itoa(i) + "\r\n")
}
writer.Flush() //将缓存中的内容写入文件
}
package main
import (
"fmt"
"io/ioutil"
)
func main() {
str := "hello golang"
err := ioutil.WriteFile("C:/test.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file failed, err:", err)
return
}
}
package main
import (
"fmt"
"io/ioutil"
)
//自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func copy(srcFileName string, dstFileName string) (err 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 main() {
src := "C:/test.txt"
dst := "D:/test1.txt"
err := copy(src, dst)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("复制文件成功")
}
package main
import (
"fmt"
"io"
"os"
)
//自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(srcFileName string, dstFileName string) (err error) {
sFile, err1 := os.Open(srcFileName)
defer sFile.Close() //必须关闭
dFile, err2 := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
defer dFile.Close() //必须关闭
if err1 != nil {
return err1
}
if err2 != nil {
return err2
}
var tempSlice = make([]byte, 1280)
for {
//读取数据
n1, err := sFile.Read(tempSlice)
if err == io.EOF {
break
}
if err != nil {
return err
}
// 写入数据
if _, err := dFile.Write(tempSlice[:n1]); err != nil {
return err
}
}
return nil
}
func main() {
//调用CopyFile 完成文件拷贝
srcFile := "C:/000.avi"
dstFile := "D:/000.avi"
err := CopyFile(srcFile, dstFile)
if err == nil {
fmt.Printf("拷贝完成\n")
} else {
fmt.Printf("拷贝错误 err=%v\n", err)
}
}
package main
import (
"fmt"
"os"
)
func main() {
err := os.Rename("D:/000.avi", "D:/1111.avi")
if err != nil {
fmt.Println(err)
}
fmt.Println("重命名成功")
}
package main
import (
"fmt"
"os"
)
func main() {
// err := os.Mkdir("./abc", 0666)
// if err != nil {
// fmt.Println(err)
// }
// os.Mkdir("./abc", 0666)
err := os.MkdirAll("./dir1/dir2/dir3", 0666) //创建多级目录
if err != nil {
fmt.Println(err)
}
}
package main
func main() {
// /1、删除一个文件
// err := os.Remove("aaa.txt")
// if err != nil {
// fmt.Println(err)
// }
//2、删除一个目录
// err := os.Remove("./aaa")
// if err != nil {
// fmt.Println(err)
// }
// 3、一次删除多个文件
// err := os.RemoveAll("dir1")
// if err != nil {
// fmt.Println(err)
// }
}