go代码示例:操作文件获取路径目录

获取GOPATH

用法:得到GOPATH环境变量,就可以使用绝对路径访问一些目录和文件了

package main

import (
    "fmt"
    "go/build"
    "os"
)

func main() {
    gopath := os.Getenv("GOPATH")
    if gopath == "" {
        gopath = build.Default.GOPATH
    }
    fmt.Println(gopath)
}

文件创建/写/读

创建目录

//mkdir 
func Mkdir(name string, perm FileMode) error
//相当于bash中的 mkdir -p
func MkdirAll(path string, perm FileMode) error

文件操作

package main

import (
	"fmt"
	"io"
	"os"
	"log"
)

var path = "/Users/novalagung/Documents/temp/test.txt"

func main() {
	createFile()
	writeFile()
	readFile()
	deleteFile()
}

func createFile() {
	// 检查文件是否存在
	var _, err = os.Stat(path)

	// create file if not exists
	if os.IsNotExist(err) {
		var file, err = os.Create(path)
		if isError(err) { return }
		defer file.Close()
	}

	fmt.Println("==> done creating file", path)
}

func openFileOrCreate(){
	//如果文件存在就清空内容
	//如果不存在既就创建0666的文件
	f,err := os.Create("my.txt")
	if err != nil {
		log.Println(err)
	}
	log.Println(f)
}

func writeFile() {
	// open file using READ & WRITE permission
	var file, err = os.OpenFile(path, os.O_RDWR, 0644)
	if isError(err) { return }
	defer file.Close()

	// write some text line-by-line to file
	_, err = file.WriteString("halo\n")
	if isError(err) { return }
	_, err = file.WriteString("mari belajar golang\n")
	if isError(err) { return }

	// save changes
	err = file.Sync()
	if isError(err) { return }

	fmt.Println("==> done writing to file")
}

func readFile() {
	// re-open file
	var file, err = os.OpenFile(path, os.O_RDWR, 0644)
	if isError(err) { return }
	defer file.Close()

	// read file, line by line
	var text = make([]byte, 1024)
	for {
		_, err = file.Read(text)
		
		// break if finally arrived at end of file
		if err == io.EOF {
			break
		}
		
		// break if error occured
		if err != nil && err != io.EOF {
			isError(err)
			break
		}
	}
	
	fmt.Println("==> done reading from file")
	fmt.Println(string(text))
}

func deleteFile() {
	// delete file
	var err = os.Remove(path)
	if isError(err) { return }

	fmt.Println("==> done deleting file")
}

func isError(err error) bool {
	if err != nil {
		fmt.Println(err.Error())
	}

	return (err != nil)
}

遍历文件夹

package main
import (
 "path/filepath"
 "os"
 "io/ioutil"
 "fmt"
 "strings"
)
//这个方法不能直接使用需要你自己在进行编辑
func walkDir(dir,outFile string) error{
		    w, err := os.Create(outFile)
		    if err != nil {
		    	return err
		    }

			filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
				//如果是文件夹
    			if info.IsDir() {
    				return nil
    			}
    			//读取文件内容
    			b, err := ioutil.ReadFile(path)
    			if err != nil {
    				return err
    			}
    			path = filepath.ToSlash(path)
    			//文件专函成bytes 方便编译到可执行文件中
    			fmt.Fprintf(w, `	assets[%q] = []byte{`, strings.TrimPrefix(path, dir))
    			for i := 0; i < len(b); i++ {
    				if i > 0 {
    					fmt.Fprintf(w, `, `)
    				}
    				fmt.Fprintf(w, `0x%02x`, b[i])
    			}
    			fmt.Fprintln(w, `}`)
    			return nil
    		})
		    return nil
}

文件重命名/移动删除

//移动和重命名
func Rename(oldpath, newpath string) error
//删除
func Remove(name string) error
func RemoveAll(path string) error
//链接文件
func Symlink(oldname, newname string) error

目录