一、在go
中判断是文件夹还是文件夹的操作
package main
import (
"fmt"
"os"
)
// 传递一个路径进去
func IsFile(path string) bool {
file, err := os.Stat(path)
if err != nil {
return false
}
return !file.IsDir()
}
func main() {
isFile := IsFile("./11.txt")
if isFile {
fmt.Println("是文件")
} else {
fmt.Println("不是文件")
}
}
二、判断文件或者文件夹是否存在
package main
import (
"fmt"
"os"
)
// 使用os.Stat()函数返回的错误值来判断
// 1.如果返回的错误为nil,说明文件或文件夹存在
// 2.如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在
// 3.返回的错误类型,不能确定是否存现
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
}
func main() {
ok, err := PathExists("./11.txt")
if ok {
fmt.Println("文件存在")
} else {
fmt.Println("文件不存在")
}
if err != nil {
fmt.Println("不能确定是否存现")
}
}
三、读文件的几种方式
-
1、使用
os.Open()
打开文件和bufio.NewReader
显示到终端package main import ( "bufio" "fmt" "io" "os" ) func main() { // 打开文件 file, err := os.Open("./11.txt") if err != nil { fmt.Println("打开失败") } defer file.Close() // 读取文件 reader := bufio.NewReader(file) // 循环读文件 for { str, err := reader.ReadString('\n') // 以为\n来读 // 当读写完成后 if err == io.EOF { break } fmt.Print(str) } }
-
2、使用
ioutil.ReadFile
直接读取出来的package main import ( "fmt" "io/ioutil" ) func main() { content, err := ioutil.ReadFile(11.txt) if err != nil { fmt.Println("打开文件失败") } fmt.Printf("%v", string(content)) }
四、使用os.OpenFile
读写文件
-
1、参数介绍
// 第一个参数的文件路径,第二个参数打开文件的方式,第三个参数是随便写的整数 /** O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件 O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件 O_RDWR int = syscall.O_RDWR // 读写模式打开文件 O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部 O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件 O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在 O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件 */
-
2、案例一:普通的写入一个文件
package main import ( "bufio" "fmt" "os" ) func main() { file, err := os.OpenFile("./11.txt", os.O_WRONLY|os.O_CREATE, 1111) if err != nil { fmt.Println("打开文件失败") } defer file.Close() str := "水痕111\n" writer := bufio.NewWriter(file) for i := 0; i < 10; i++ { // 因为writer是带缓存的,因此在调用WriteString方法的时候,其实是先将内容写到缓存中,所以需要调用 // Flush方法,将缓冲的数据真实的写入到文件中,否则文件中没有数据 writer.WriteString(str) writer.Flush() } }
-
3、案例二:覆盖之前的文件写入
package main import ( "bufio" "fmt" "os" ) func main() { file, err := os.OpenFile("./11.txt", os.O_WRONLY | os.O_TRUNC, 111) if err != nil { fmt.Println("打开文件失败") } defer file.Close() str :="你好\r\n" writer := bufio.NewWriter(file) for i := 0; i< 10; i++ { writer.WriteString(str) } writer.Flush() }
-
4、案例三:追加的方式写入文件
package main import ( "bufio" "fmt" "os" ) func main() { file, err := os.OpenFile("./11.txt", os.O_WRONLY|os.O_APPEND, 1111) if err != nil { fmt.Println("打开文件失败") } defer file.Close() str := "中国你好\r\n" writer := bufio.NewWriter(file) for i := 0; i < 10; i++ { writer.WriteString(str) } writer.Flush() }
-
5、案例四:读写一起使用
package main import ( "bufio" "fmt" "io" "os" ) func main() { file, err := os.OpenFile("./11.txt", os.O_RDWR|os.O_APPEND, 1111) if err != nil { fmt.Println("打开文件失败") } defer file.Close() reader := bufio.NewReader(file) for { str, err := reader.ReadString('\n') if err == io.EOF { break } fmt.Println(str) } fmt.Println("-----------结束显示-----------") str := "中国你好\r\n" writer := bufio.NewWriter(file) for i := 0; i < 10; i++ { writer.WriteString(str) } writer.Flush() fmt.Println("-----------输入完成-----------") }
五、文件的拷贝
-
1、文件内容的拷贝(已知两个文件都存在)
package main import ( "fmt" "io/ioutil" ) func main() { data, err := ioutil.ReadFile("./11.txt") if err != nil { fmt.Println("读文件错误") } err = ioutil.WriteFile("./22.txt", data, 111) if err != nil { fmt.Println("写入文件错误") } }
-
2、整个文件的拷贝
package main import ( "bufio" "fmt" "io" "os" ) func CopyFile(dstFileName string, srcFileName string) (written int64, err error) { srcFile, err := os.Open(srcFileName) if err != nil { fmt.Println("打开文件失败") } defer srcFile.Close() reader := bufio.NewReader(srcFile) dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 111) if err != nil { fmt.Println("打开失败") } writer := bufio.NewWriter(dstFile) defer dstFile.Close() return io.Copy(writer, reader) }