创建与打开
golang 创建文件的函数有:
# Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,
# 如果文件已存在会截断它(为空文件)。如果成功,返回的文件对象可用于I/O;
# 对应的文件描述符具有O_RDWR模式。如果出错,错误底层类型是*PathError
func Create(name string) (file *File, err error)
# NewFile使用给出的Unix文件描述符和名称创建一个文件
func NewFile(fd int, name string) *File
golang 打开文件的函数有:
# Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;
# 对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。
func Open(name string) (file *File, err error)
# OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。
# 它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。
# 如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。
func OpenFile(name string, flag int, perm uint32)
写文件
golang 写文件的函数有:
func (file *File) Write(b []byte) (n int, err error)
func (file *File) WriteAt(b []byte, off int64) (n int, err error)
func (file *File) WriteString(s string) (ret int, err error)
eg:
func main() {
usrFile := "data.txt"
fout, err := os.Create(usrFile)
defer fout.Close()
if err != nil {
fmt.Println(err.Error())
return
}
fout.WriteString("Just a test data!rn")
fout.Write([]byte("Just a test dataa!rn"))
}
读文件
golang 读文件的函数有:
# Read方法从f中读取最多len(b)字节数据并写入b。它返回读取的字节数和可能遇到的任何错误。 # 文件终止标志是读取0个字节且返回值err为io.EOF。
func (file *File) Read(b []byte) (n int, err error)
# ReadAt从指定的位置(相对于文件开始位置)读取len(b)字节数据并写入b。
# 它返回读取的字节数和可能遇到的任何错误。当n<len(b)时,本方法总是会返回错误;如果是因为到达文件结尾,返回值err会是io.EOF。
func (file *File) ReadAt(b []byte, off int64) (n int, err error)
eg:
func main() {
usrFile := "data.txt"
fin, err := os.Open(usrFile)
defer fin.Close()
if err != nil {
fmt.Println(err.Error())
return
}
buf := make([]byte, 1024)
for {
n, _ := fin.Read(buf)
if 0 ==n {
break
}
os.Stdout.Write(buf[:n])
}
}
bufio 使用
eg:
func main() {
fi, err := os.Open("input.txt")
defer fi.Close()
if err != nil {
panic(err)
}
r := bufio.NewReader(fi)
fo, err := os.Open("output.txt")
defer fo.Close()
if err != nil {
panic(err)
}
w := bufio.NewWriter(fo)
buf := make([]byte, 1024)
s
for {
n ,err := r.Read(buf)
# err == EOF时要特殊处理
if err != nil && err != io.EOF {
panic(err)
}
if n == 0 {
break
}
if ne2, err := w.Write(buf[:n]); err != nil {
panic(err)
} else if n2 != n {
panic("error in writing")
}
}
# err前面已经定义过了, 不要使用 :=
if err = w.Flush(); err != nil {
panic(err)
}
}
使用 ioutil
ioutil 是 golang 文件操作的一个辅助包,提供如下函数:
# 从指定的文件中读取数据并返回文件的内容。调用成功时,返回的err时 nil而不是EOF
# 因为本函数是读取整个文件,它不会将读取返回的EOF视为应返回的错误
func ReadFile(filename string) ([]byte, error)
# 函数向指定的文件中写入数据。如果文件不存在,将按给定的权限(perm)创建文件
# 如果文件存在,在写入之前会清空文件
fucn WriteFile(filename string, data []byte, perm os.FileMode) error eg:
func main() {
b, err := ioutil.ReadFile("input.txt")
if err != nil {
panic(err)
}
err = ioutil.WriteFile("output.txt", b, 0644)
if err != nil {
panic(err)
}
} ## 删除文件 **golang删除文件的函数有:**
funnc Remove(name string) Error
.ds-share{ text-align: right; } <p><a href="/media" class="user-mention" title="@media"><i>@</i>media</a> only screen and (max-width: 700px) { .ds-share {</p> <p>} } </p>
<div class="ds-share" data-thread-key="/blog/2016/05/14/golang 文件操作" data-title="golang 文件操作" data-images="http://lee/img/green.jpg" data-content="golang 文件操作
创建与打开 golang 创建文件的函数有: