zoukankan      html  css  js  c++  java
  • Go_ioutil包

    1. ioutil包的方法

    // Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情
    // 并且始终成功返回。
    var Discard io.Writer = devNull(0)
    
    // ReadAll 读取 r 中的所有数据,返回读取的数据和遇到的错误。
    // 如果读取成功,则 err 返回 nil,而不是 EOF,因为 ReadAll 定义为读取
    // 所有数据,所以不会把 EOF 当做错误处理。
    func ReadAll(r io.Reader) ([]byte, error)
    
    // ReadFile 读取文件中的所有数据,返回读取的数据和遇到的错误。
    // 如果读取成功,则 err 返回 nil,而不是 EOF
    func ReadFile(filename string) ([]byte, error)
    
    // WriteFile 向文件中写入数据,写入前会清空文件。
    // 如果文件不存在,则会以指定的权限创建该文件。
    // 返回遇到的错误。
    func WriteFile(filename string, data []byte, perm os.FileMode) error
    
    // ReadDir 读取指定目录中的所有目录和文件(不包括子目录)。
    // 返回读取到的文件信息列表和遇到的错误,列表是经过排序的。
    func ReadDir(dirname string) ([]os.FileInfo, error)
    
    // NopCloser 将 r 包装为一个 ReadCloser 类型,但 Close 方法不做任何事情。
    func NopCloser(r io.Reader) io.ReadCloser
    
    // TempFile 在 dir 目录中创建一个以 prefix 为前缀的临时文件,并将其以读
    // 写模式打开。返回创建的文件对象和遇到的错误。
    // 如果 dir 为空,则在默认的临时目录中创建文件(参见 os.TempDir),多次
    // 调用会创建不同的临时文件,调用者可以通过 f.Name() 获取文件的完整路径。
    // 调用本函数所创建的临时文件,应该由调用者自己删除。
    func TempFile(dir, prefix string) (f *os.File, err error)
    
    // TempDir 功能同 TempFile,只不过创建的是目录,返回目录的完整路径。
    func TempDir(dir, prefix string) (name string, err error)
    
    package main
    
    import (
    	"io/ioutil"
    	"fmt"
    	"os"
    )
    
    func main() {
    	/*
    	ioutil包:
    		ReadFile()
    		WriteFile()
    		ReadDir()
    		..
    	 */
    
    	//1.读取文件中的所有的数据
    	fileName := "/Users/ruby/Documents/pro/a/aa.txt"
    	data, err := ioutil.ReadFile(fileName) //不需要打开和关闭文件
    	fmt.Println(err)
    	fmt.Println(data)
    	fmt.Println(string(data))
    
    	//2.写出数据
    	fileName := "/Users/ruby/Documents/pro/a/bbb.txt"
    	s1 := "床前明月光,地上鞋三双"
    	//会清空原来的内容
    	//写的数据要求的一个字节类型的切片
    	err := ioutil.WriteFile(fileName, []byte(s1), os.ModePerm)
    	fmt.Println(err)
    
    	//3.ReadAll() //ReadFile的底层就是调用ReadAll
    	s2 := "王二狗和李小花是两个好朋友,Ruby就是我,也是他们的朋友"
    	r1 := strings.NewReader(s2)
    	data, err := ioutil.ReadAll(r1)
    	fmt.Println(err)
    	fmt.Println(data)
    	fmt.Println(string(data))
    
    	//4.ReadDir(),读取一个目录下的子内容:子文件和子目录,但是只能读取一层
    	dirName := "/Users/ruby/Documents/pro"
    	fileInfos, err := ioutil.ReadDir(dirName)
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(len(fileInfos))
    	for i := 0; i < len(fileInfos); i++ {
    		//fmt.Printf("%T
    ",fileInfos[i])
    		fmt.Printf("第 %d 个:名称:%s,是否是目录:%t
    ", i, fileInfos[i].Name(), fileInfos[i].IsDir())
    	}
    
    	//5.临时目录和临时文件
    	dir, err := ioutil.TempDir("/Users/ruby/Documents/pro/a", "Test")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	defer os.Remove(dir)
    	fmt.Println(dir)
    
    	file, err := ioutil.TempFile(dir, "Test")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	defer os.Remove(file.Name())
    	fmt.Println(file.Name())
    
    }
    

    2. 遍历文件夹

    package main
    
    import (
    	"io/ioutil"
    	"log"
    	"fmt"
    )
    
    func main() {
    	/**
    	遍历文件夹:
    	 */
    	dirname := "/Users/ruby/Documents/pro"
    	listFiles(dirname, 0)
    
    }
    func listFiles(dirname string, level int) {
    	//level用来记录当前递归的层次,生成带有层次感的空格
    	s := "|--"
    	for i := 0; i < level; i++ {
    		s = "|  " + s
    	}
    	fileInfos, err := ioutil.ReadDir(dirname)
    	if err != nil {
    		log.Fatal(err)
    	}
    	for _, fi := range fileInfos {
    		filename := dirname + "/" + fi.Name() //拼接目录结构
    		fmt.Printf("%s%s
    ", s, filename)
    		if fi.IsDir() {
    			//递归调用方法
    			listFiles(filename, level+1) //如果是文件夹
    		}
    	}
    }
    
  • 相关阅读:
    3.java开发环境配置
    2.java主要特性
    1.java中main函数理解
    测试项目团队角色岗位职责
    单身程序员
    软件测评师考试
    vue父子组件通信
    python偏函数使用
    Numpy+Pandas读取数据
    chrome无界面模式headless配置
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12251405.html
Copyright © 2011-2022 走看看