“–————人与人之间还是直接点好——————”
1.创建文件
os.Create() file,
err := os.Create("./demo.txt")
func main() {
file, err := os.Create("./demo.txt")
fmt.Printf("%T", file)
//*os.File 文件指针类型
if err != nil {
fmt.Println("文件创建失败。")
return
}
defer file.Close()
}
//绝对路径 如果文件已存在,会将文件清空。
//创建失败!路径不存在,权限不足(root),打开文件数量超过上限,磁盘空间不足等
2.打开文件
打开文件open()
func Open(name string) (file File, err error) Open打开一个文件用于读取。
如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。 如果出错,错误底层类型是PathError。
3.打开临时文件
openfile() func OpenFile(name string, flag int, perm FileMode) (file File, err error)
OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。
它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。
如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是PathError。
4.延时关闭文件
file.close() func (f *File) Close() error defer延迟调用,程序结束关闭文件释放资源 Close关闭文件f,使文件不能用于读写。它返回可能出现的错误。
*5.func (f File) Write(b []byte) (n int, err error)
str := "hello world!"
data := []byte(str)
count, err = file.Write(data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Write %d \n", count)
//Write向文件中写入len(b)字节数据。它返回写入的字节数和可能遇到的任何错误。
//如果返回值n!=len(b),本方法会返回一个非nil的错误。
*6.func (f File) WriteString(s string) (ret int, err error)
file, err := os.Open(EaplocalPath)
if err != nil {
return err
}
defer file.Close()
count, err := file.WriteString("welcomelearngo")
CheckError(err)
fmt.Printf("WriteString %d \n", count)
//WriteString类似Write,但接受一个字符串参数。
*7.func (f File) Read(b []byte) (n int, err error)
data := make([]byte, 1024)//文件的信息可以读取进一个[]byte切片
count, err := file.Read(data)
if err != nil {
if err == io.EOF {//文件结尾
fmt.Println("文件读取结束")
}
}
fmt.Printf("read %d bytes: %q\n", count, data[:count])
//Read方法从f中读取最多len(b)字节数据并写入b。它返回读取的字节数和可能遇到的任何错误.
//文件终止标志是读取0个字节且返回值err为io.EOF
8. func ReadFile(filename string) ([]byte, error)
content, err := ioutil.ReadFile(metaPath)
if err != nil {
log.Error("ReadFile failed :\n", err)
return
}
//ReadFile读取文件中的所有数据
// 返回读取的数据和读取过程中遇到的任何错误
// 如果读取成功,则 err 返回 nil,而不是 EOF
9. func WriteFile(filename string, data []byte, perm os.FileMode) error
err = ioutil.WriteFile(metaPath, routeValue, 0666)
if err != nil {
log.Error("WriteFile failed :\n", err)
return
}
//WriteFile向文件写入数据
// 如果之前有数据则会将原来的进行清空
// 如果文件不存在,将以指定的权限创建该文件(,0666)
// 返回写入过程中遇到的任何错误
10.文件按行读取(文件扫描器)
//buifo带缓冲式按行读取文件
//func NewReader(rd io.Reader) *Reader
//func (b *Reader) ReadString(delim byte) (line string, err error)
ReadString读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的字符串。
如果ReadString方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。
当且仅当ReadString方法返回的切片不以delim结尾时,会返回一个非nil的错误。
func eaplocaladd() error {
//打开源文件和临时文件(返回文件指针句柄)
file, err := os.Open(EaplocalPath)
if err != nil {
return err
}
defer file.Close()
temp, err := os.OpenFile(Temfile, os.O_RDWR|os.O_CREATE, 0766)
if err != nil {
return err
}
defer temp.Close()
//获取一个Reader(带缓冲), 通过 file 去构建reader
reader := bufio.NewReader(file)
for {
// 读取文件的一行
linestr, err := reader.ReadString('\n')
if err != nil {
if err == io.EOF {
break
}
return err
}
_, err = temp.WriteString(linestr)
if err != nil {
return err
}
return nil
}
11.示例:临时目录、临时文件 默认创建文件夹在root/temp/
func main() {
//12.创建临时目录
dir, err := ioutil.TempDir("", "Test") //(“路径”,“文件夹名”)
if err != nil {
fmt.Println(err)
}
defer os.Remove(dir) // 用完删除
fmt.Printf("%s\n", dir)
//13.创建临时文件
f, err := ioutil.TempFile(dir, "Test")
if err != nil {
fmt.Println(err)
}
defer os.Remove(f.Name()) // 用完删除
fmt.Printf("%s\n", f.Name())
}
14.示例:读取目录
func main() {
rd, err := ioutil.ReadDir("/")
fmt.Println(err)
for _, fi := range rd {
if fi.IsDir() {
fmt.Printf("[%s]\n", fi.Name())
} else {
fmt.Println(fi.Name())
}
}
}
15.文件拷贝func Copy(dst Writer, src Reader) (written int64, err error)
将src的数据拷贝到dst,直到在src上到达EOF或发生错误。返回拷贝的字节数和遇到的第一个错误。
对成功的调用,返回值err为nil而非EOF,因为Copy定义为从src读取直到EOF,它不会将读取到EOF视为应报告的错误。
如果src实现了WriterTo接口,本函数会调用src.WriteTo(dst)进行拷贝;
否则如果dst实现了ReaderFrom接口,本函数会调用dst.ReadFrom(src)进行拷贝。
w, err:= CopyFile("filecopy.txt","file.txt")
if err != nil{
fmt.Println(err)
}
16.字符串转义
func EscapeCharacter(str string) string {
return strings.Replace(str, "\\n", "\n", -1)
//将换行符转换未字符串 \n
}
17.判断文件是否存在
func IsFileExist(path string) bool {
_, err := os.Stat(path)
return err == nil || os.IsExist(err)
}
18.删除一个文件,先判断文件是存在,再进行删除否
func DeleteFile(path string) error {
if IsFileExist(path) == false {
return nil
}
return os.Remove(path)
}
注意: 文件中中文乱码问题,确保使用UTF-8编码