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) //如果是文件夹
    		}
    	}
    }
    
  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12251405.html
Copyright © 2011-2022 走看看