1. go
Determine whether it is a folder or a folder operation in
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("不是文件")
}
}
Second, determine whether the file or folder exists
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("不能确定是否存现")
}
}
Three, several ways to read files
-
1. Use to
os.Open()
open the file andbufio.NewReader
display to the terminalpackage 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. Use
ioutil.ReadFile
directly readpackage main import ( "fmt" "io/ioutil" ) func main() { content, err := ioutil.ReadFile(11.txt) if err != nil { fmt.Println("打开文件失败") } fmt.Printf("%v", string(content)) }
Four, use os.OpenFile
read and write files
-
1. Introduction to parameters
// 第一个参数的文件路径,第二个参数打开文件的方式,第三个参数是随便写的整数 /** 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. Case 1: Normally write a file
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. Case 2: Overwrite the previous file writing
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. Case 3: Write file by appending
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. Case 4: Use both reading and writing
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("-----------输入完成-----------") }
5. Copy of files
-
1. Copy of file content (both files are known to exist)
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. Copy of the entire file
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) }