Go基础编程实践(六)—— 文件

检查文件是否存在

在此程序同目录下创建log.txt文件,以检测。

package main

import (
    "os"
    "fmt"
)

func main() {
    if _, err := os.Stat("log.txt"); err  == nil {
        fmt.Println("Log.txt file exists")
    }
}

检查文件是否不存在

package main

import (
    "os"
    "fmt"
)

func main() {
    // IsNotExist函数定义:func IsNotExist(err error) bool
    // 返回一个布尔值说明该错误是否表示一个文件或目录不存在
    if _, err := os.Stat("log.txt"); os.IsNotExist(err) {
        fmt.Println("Log.txt file does not exist")
    } else {
        fmt.Println("Log.txt file exists")
    }
}

读取文件内容

在此程序同目录下创建name.txt文件,以检测。

package main

import (
    "io/ioutil"
    "fmt"
)

func main() {
    contentBytes, err := ioutil.ReadFile("name.txt")
    if err == nil {
        // ReadFile返回[]byte
        fmt.Println(string(contentBytes))
    }
}

写入文件

在此程序同目录下创建hello_world文件。

package main

import (
    "io/ioutil"
    "fmt"
)

func main() {
    hello := "Hello, World"
    // WriteFile接受三个参数,要写入的文件名,写入的[]byte,以及写入权限
    err := ioutil.WriteFile("hello_world", []byte(hello), 0644)
    if err != nil {
        fmt.Println(err)
    }
}

创建临时文件

package main

import (
    "io/ioutil"
    "fmt"
)

func main() {
    helloWorld := "Hello, World"
    // TempFile定义:func TempFile(dir, prefix string) (f *os.File, err error)
    // 在dir目录下创建一个新的、使用prefix为前缀的临时文件,
    // 以读写模式打开该文件并返回os.File指针。
    file, err := ioutil.TempFile("", "hello_world_temp")
    if err != nil {
        panic(err)
    }
    // defer os.Remove(file.Name())
    if _, err := file.Write([]byte(helloWorld)); err != nil {
        panic(err)
    }
    fmt.Println(file.Name())
}

计算文件行数

在程序同目录下创建"names.txt"文件,随便写几行字。

package main

import (
    "os"
    "bufio"
    "fmt"
)

func main() {
    file, _ := os.Open("names.txt")
    fileScanner := bufio.NewScanner(file)
    lineCount := 0
    for fileScanner.Scan() {
        lineCount++
    }
    defer file.Close()
    fmt.Println(lineCount)
}

读取文件特定行

package main

import (
    "os"
    "bufio"
    "fmt"
)

func main() {
    fmt.Println(readLine(2))
}

func readLine(lineNumber int) string {
    file, _ := os.Open("names.txt")
    fileScanner := bufio.NewScanner(file)
    lineCount := 0
    for fileScanner.Scan() {
        if lineCount == lineNumber {
            return fileScanner.Text()
        }
        lineCount++
    }
    defer file.Close()
    return ""
}

比较两个文件的内容

package main

import (
    "fmt"
    "io/ioutil"
    "bytes"
)

func main() {
    one, err := ioutil.ReadFile("one.txt")
    if err != nil {
        panic(err)
    }
    two, err2 := ioutil.ReadFile("two.txt")
    if err2 != nil {
        panic(err2)
    }
    // Equal返回bool值
    same := bytes.Equal(one, two)
    fmt.Println(same)
}

删除文件

package main

import "os"

func main() {
    err := os.Remove("new.txt")
    if err != nil {
        panic(err)
    }
}

复制或移动文件

package main

import (
    "os"
    "io"
)

func main() {
    original, err := os.Open("original.txt")
    if err != nil {
        panic(err)
    }
    defer original.Close()
    original_copy, err2 := os.Create("copy.txt")
    if err2 != nil {
        panic(err2)
    }
    defer original_copy.Close()
    // Copy(1, 2) -> 把2拷贝到1
    _, err3 := io.Copy(original_copy, original)
    if err3 != nil {
        panic(err3)
    }
}
// 移动文件:拷贝之后利用os.Remove()删除原文件

重命名文件

package main

import "os"

func main() {
    os.Rename("old.txt", "new.txt")
}

删除目录及文件

package main

import (
    "os"
    "fmt"
)

func main() {
    // Remove无法删除非空文件夹,RemoveAll可以
    err := os.RemoveAll("hello")
    if err != nil {
        panic(err)
    }
}

列出目录下所有文件

创建一个hello文件夹,在文件夹内创建两个文件,main文件和hello文件夹并列。

.
├── hello
│   ├── 1.txt
│   └── 2.txt
└── main.go
package main

import (
    "io/ioutil"
    "fmt"
)

func main() {
    files, err := ioutil.ReadDir("hello")
    if err != nil {
        panic(err)
    }
    for _, f := range files {
        fmt.Println(f.Name())
    }
}

原文地址:https://www.cnblogs.com/GaiHeiluKamei/p/11141110.html

时间: 2024-10-10 13:10:38

Go基础编程实践(六)—— 文件的相关文章

并发编程实践六:ReentrantReadWriteLock

ReentrantReadWriteLock是一个读写锁,它提供了一个读锁和一个写锁,读锁用于只读操作,而写锁用于写入操作,读操作可以并行进行,而写操作则是互斥的.读锁和写锁的分离在一些写少读多的应用中可以带来性能上的提升,例如:一个hashmap在构造之后很少修改,却经常进行查找操作,这样查找操作就可以并发进行从而提高性能.这篇文章首先为你介绍读写锁的基本特性,在具体应用中需要解决的问题,然后介绍ReentrantReadWriteLock的功能和具体实现. 读写锁 在某些应用场合,大量的读者

Go基础编程实践——字符串

修剪空格 strings包中的TrimSpace函数用于去掉字符串首尾的空格. package main import ( "fmt" "strings" ) func main() { helloWorld := "\t Hello, World " trimHello := strings.TrimSpace(helloWorld) fmt.Printf("%d %s\n", len(helloWorld), helloW

Go基础编程实践(四)—— Map和数组

数组去重 package main import "fmt" func main(){ intSlice := []int{1,5,5,5,5,7,8,6,6, 6} fmt.Println(intSlice) uniqueIntSlice := unique(intSlice) fmt.Println(uniqueIntSlice) } func unique(intSlice []int) []int{ keys := make(map[int]bool) uniqueElemen

Go基础编程实践(八)—— 系统编程

捕捉信号 // 运行此程序,控制台将打印"Waiting for signal" // 按Ctrl + C 发送信号以关闭程序,将发生中断 // 随后控制台依次打印"Signal .."."Exiting..." package main import ( "os" "os/signal" "syscall" "fmt" ) func main() { // 缓冲通道

Go基础编程实践(十)—— 数据库

从数据库中读取数据 在http://sqlitebrowser.org/下载sqlite3可视化工具,在本main.go同目录下创建personal.db数据库,创建表如下: package main import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" ) // 用struct类型将来自SQL数据库的数据映射到内存中的对象 type Profile struct { Prof

郑捷《机器学习算法原理与编程实践》学习笔记(第六章 神经网络初步)6.3 自组织特征映射神经网路(SMO)

具体原理网址:http://wenku.baidu.com/link?url=zSDn1fRKXlfafc_tbofxw1mTaY0LgtH4GWHqs5rl8w2l5I4GF35PmiO43Cnz3YeFrrkGsXgnFmqoKGGaCrylnBgx4cZC3vymiRYvC4d3DF3 自组织特征映射神经网络(Self-Organizing Feature Map.也称Kohonen映射),简称为SMO网络,主要用于解决模式识别类的问题.SMO网络属于无监督学习算法,与之前的Kmeans算

系统调用操作文件——《Unix/Linux编程实践教程》读书笔记

1.who命令通过读系统日志的内容显示当前已经登录的用户. 2.Unix系统把数据存放在文件中,可以通过以下系统调用操作文件: open(filename, how) creat(filename, mode) read(fd, buffer, amt) write(fd, buffer, amt) lseek(fd, distance, base) close(fd) 3.进程对文件的读/写都要通过文件描述符,文件描述符表示文件和进程之间的连接. 4.每次系统调用都会导致用户模式和内核模式的切

python基础知识六 文件的基本操作+菜中菜

基础知识六 文件操作 ? open():打开 ? file:文件的位置(路径) ? mode:操作文件模式 ? encoding:文件编码方式 ? f :文件句柄 f = open("1.txt",mode = 'r',encoding = 'utf-8') print(f.read()) f.close 1.文件操作模式: ? r,w,a(重要) ? rb,wb,ab(次要) ? r+,w+,a+ 1.1 r/w/a 1. r操作: f = open('1.txt','r') pri

[Java 并发] Java并发编程实践 思维导图 - 第六章 任务执行

根据<Java并发编程实践>一书整理的思维导图.希望能够有所帮助. 第一部分: 第二部分: 第三部分: