golang 的io与os包中的常用方法
目录
I/O 和 OS 方法概述
文件读取与写入
文件和目录管理
环境变量
其他系统交互
I/O 和 OS 方法概述
文件读取与写入
-
io.ReadAll
- 用于从
Reader
接口读取所有数据并返回一个字节切片。
bytes, err := io.ReadAll(file)
- 用于从
-
os.Open
- 打开一个文件用于读取。如果操作成功,则返回一个指向
File
的指针;如果失败,则返回错误。
file, err := os.Open("os/1.txt")
- 打开一个文件用于读取。如果操作成功,则返回一个指向
-
os.OpenFile
- 更通用的打开文件的方式,允许指定标志(如只读、读写等)和权限模式。
file, _ = os.OpenFile("os/1.txt", os.O_RDONLY, 0644)
-
os.Create
- 创建一个新文件用于写入,如果文件已存在则会被截断。
file, _ = os.Create("os/2.txt")
-
file.WriteString
- 向文件写入字符串,并返回写入的字节数。
n, _ := file.WriteString("hello world")
文件和目录管理
-
os.Remove
- 删除一个文件或目录。
_ = os.Remove("os/2.txt")
-
os.Stat
- 获取文件的信息,包括大小、修改时间等。
fileInfo, err := os.Stat("os/1.txt")
环境变量
-
os.Setenv
- 设置环境变量的值。
os.Setenv("a", "A")
-
os.Environ
- 返回所有环境变量的列表,每个元素格式为
"key=value"
。
for _, env := range os.Environ() { fmt.Println(env) }
- 返回所有环境变量的列表,每个元素格式为
其他系统交互
-
os.Getwd
- 获取当前工作目录的路径。
fmt.Println(os.Getwd())
-
os.Getpid
- 获取当前进程的ID。
fmt.Println(os.Getpid())
-
os.Getppid
- 获取父进程的ID。
fmt.Println(os.Getppid())
-
os.TempDir
- 返回临时目录的路径。
fmt.Println(os.TempDir())
这些方法提供了对文件系统的访问、环境变量的管理以及与其他操作系统功能的交互能力,是Go语言进行系统编程的重要工具。
package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
// io.Copy
// 打开文件
file, err := os.Open("os/1.txt")
if err != nil {
log.Fatalf("failed to open file: %v", err)
}
defer file.Close()
// 读取文件内容
bytes, err := io.ReadAll(file) // 使用 io.ReadAll 替代 ioutil.ReadAll
if err != nil {
log.Fatalf("failed to read file: %v", err)
}
fmt.Println(string(bytes))
//文件操作
//os.Open(name string) (file *File, err error):打开一个文件用于读取。
file, _ = os.Open("os/1.txt")
defer file.Close()
//fmt.Println(file.Name())
//bytes, _ := ioutil.ReadAll(file) // ioutil.ReadAll已弃用
bytes, _ = io.ReadAll(file)
fmt.Println(string(bytes))
// os.OpenFile()
file, _ = os.OpenFile("os/1.txt", 1, 1)
//f, err := os.OpenFile("app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
//os.Create(name string) (file *File, err error):创建一个新文件用于写入,如果文件已存在则会被截断。
file, _ = os.Create("os/2.txt")
n, _ := file.WriteString("hello world")
fmt.Println(n)
//os.Remove(name string) error:删除一个文件或目录。
_ = os.Remove("os/2.txt")
//os.Rename(oldpath, newpath string) error:重命名(或移动)一个文件或目录。
//os.Stat(name string) (fi FileInfo, err error):获取文件的信息,如大小、修改时间等。
fileInfo, err := os.Stat("os/1.txt") // 获取文件信息
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("File name:", fileInfo.Name())
fmt.Println("Size:", fileInfo.Size())
fmt.Println("Permissions:", fileInfo.Mode())
fmt.Println("Last modified:", fileInfo.ModTime())
fmt.Println("Is directory:", fileInfo.IsDir())
//os.Chdir(dir string) error:改变当前工作目录。
//环境变量
//os.Getenv(key string) string:获取环境变量的值。
//os.Setenv(key, value string) error:设置环境变量的值。
os.Setenv("a", "A")
os.Setenv("b", "B")
//os.Environ() []string:返回所有环境变量的列表,格式为 "key=value"。
for _, env := range os.Environ() {
fmt.Println(env)
}
//执行命令
//os.StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error):启动一个新的进程。
//argv := []string{"echo", "Hello world!"}
//attr := &os.ProcAttr{
// Files: []*os.File{nil, os.Stdout, os.Stderr},
// Sys: &syscall.SysProcAttr{},
//}
启动新进程
//process, _ := os.StartProcess(argv[0], argv, attr)
//fmt.Println(process.Pid)
//os.Executable() (string, error):返回当前执行程序的路径。
//其他
//os.Exit(code int):退出当前程序,并返回状态码给操作系统。
//os.Getwd() (dir string, err error):获取当前工作目录的路径。
fmt.Println(os.Getwd())
//os.Getpid() int:获取当前进程的ID。
fmt.Println(os.Getpid())
//os.Getppid() int:获取父进程的ID。
fmt.Println(os.Getppid())
//os.TempDir() string:返回临时目录的路径。
fmt.Println(os.TempDir())
}