美文网首页
第05天(异常、文本文件处理)_04

第05天(异常、文本文件处理)_04

作者: lucas777 | 来源:发表于2020-01-14 18:08 被阅读0次

15_设备文件的使用.go

package main

import (
    "fmt"
    "os"
)

func main() {
    //os.Stdout.Close() //关闭后,无法输出
    //fmt.Println("are u ok?") //往标准输出设备(屏幕)写内容
    //标准设备文件(os.Stdout),默认已经打开,用户可以直接使用
    //os.Stdout
    os.Stdout.WriteString("are u ok?\n")
    //os.Stdin.Close() //关闭后,无法输入
    var a int
    fmt.Println("请输入a: ")
    fmt.Scan(&a) //从标准输入设备中读取内容,放在a中
    fmt.Println("a = ", a)
}

16_文件的读写.go

package main

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

func WriteFile(path string) {
    //打开文件,新建文件
    f, err := os.Create(path)
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    //使用完毕,需要关闭文件
    defer f.Close()
    var buf string
    for i := 0; i < 10; i++ {
        //"i = 1\n", 这个字符串存储在buf中
        buf = fmt.Sprintf("i = %d\n", i)
        //fmt.Println("buf = ", buf)
        n, err := f.WriteString(buf)
        if err != nil {
            fmt.Println("err = ", err)
        }
        fmt.Println("n = ", n)
    }
}

func ReadFile(path string) {
    //打开文件
    f, err := os.Open(path)
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    //关闭文件
    defer f.Close()
    buf := make([]byte, 1024*2) //2k大小
    //n代表从文件读取内容的长度
    n, err1 := f.Read(buf)
    if err1 != nil && err1 != io.EOF { //文件出错,同时没有到结尾
        fmt.Println("err1 = ", err1)
        return
    }
    fmt.Println("buf = ", string(buf[:n]))
}

//每次读取一行
func ReadFileLine(path string) {
    //打开文件
    f, err := os.Open(path)
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    //关闭文件
    defer f.Close()
    //新建一个缓冲区,把内容先放在缓冲区
    r := bufio.NewReader(f)
    for {
        //遇到'\n'结束读取, 但是'\n'也读取进入
        buf, err := r.ReadBytes('\n')
        if err != nil {
            if err == io.EOF { //文件已经结束
                break
            }
            fmt.Println("err = ", err)
        }
        fmt.Printf("buf = #%s#\n", string(buf))
    }
}

func main() {
    path := "./demo.txt"
    //WriteFile(path)
    //ReadFile(path)
    ReadFileLine(path)
}

17_拷贝文件.go

package main

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

func main() {
    list := os.Args //获取命令行参数
    if len(list) != 3 {
        fmt.Println("usage: xxx srcFile dstFile")
        return
    }

    srcFileName := list[1]
    dstFileName := list[2]
    if srcFileName == dstFileName {
        fmt.Println("源文件和目的文件名字不能相同")
        return
    }

    //只读方式打开源文件
    sF, err1 := os.Open(srcFileName)
    if err1 != nil {
        fmt.Println("err1 = ", err1)
        return
    }

    //新建目的文件
    dF, err2 := os.Create(dstFileName)
    if err2 != nil {
        fmt.Println("err2 = ", err2)
        return
    }

    //操作完毕,需要关闭文件
    defer sF.Close()
    defer dF.Close()

    //核心处理,从源文件读取内容,往目的文件写,读多少写多少
    buf := make([]byte, 4*1024) //4k大小临时缓冲区
    for {
        n, err := sF.Read(buf) //从源文件读取内容
        if err != nil {
            fmt.Println("err = ", err)
            if err == io.EOF { //文件读取完毕
                break
            }
        }
        //往目的文件写,读多少写多少
        dF.Write(buf[:n])
    }
}

课堂笔记

设备文件:
屏幕(标准输出设备)  fmt.Println()   往标准输出设备写内容
键盘(标准输入设备)  fmt.Scan()      从标准输入设备读取内容

磁盘文件,放在存储设备上的文件
1) 文本文件     以记事本打开,能看到内容(不是乱码)
2) 二进制文件    以记事本打开,能看到内容(是乱码)

为什么需要文件?内存掉电丢失,程序结束,内存中的内容消失
文件放磁盘,程序结束,文件还是存在

相关文章

网友评论

      本文标题:第05天(异常、文本文件处理)_04

      本文链接:https://www.haomeiwen.com/subject/dxvaactx.html