Go标准库之读写文件(File)

创建一个空文件
package main

import (
"log"
"os"
) func main() {
file, err := os.Create("empty.txt")
if err != nil {
log.Fatal("create file err", err)
}
log.Println(file)
file.Close()
}
获取文件的信息
package main

import (
"fmt"
"log"
"os"
) func main() {
fileInfo, err := os.Stat("main.go")
if err != nil {
log.Fatal(err)
}
fmt.Println("File Name:", fileInfo.Name())
fmt.Println("Size in bytes:", fileInfo.Size())
fmt.Println("Permissions:", fileInfo.Mode())
fmt.Println("Last modified:", fileInfo.ModTime())
fmt.Println("Is Directory:", fileInfo.IsDir())
fmt.Printf("System interface type:%T\v\n", fileInfo.Sys())
fmt.Printf("System info:%+v\n\n", fileInfo.Sys())
}
重命名和移动文件
package main

import (
"log"
"os"
) func main() {
originalPath := "empty.txt"
newPath := "test.txt"
err := os.Rename(originalPath, newPath)
if err != nil {
log.Fatal(err)
}
}
删除文件
package main

import (
"log"
"os"
) func main() {
err := os.Remove("empty.txt")
if err != nil {
log.Fatal(err)
}
}
打开关闭文件
package main

import (
"log"
"os"
) func main() {
//简单的打开文件
file, err := os.Open("test.txt")
if err != nil {
log.Fatal(err)
}
file.Close() file, err = os.OpenFile("test.txt", os.O_APPEND, 0666)
if err != nil {
log.Fatal(err)
}
file.Close()
}
打开文件的一些其他的操作
os.O_RDONLY     //只读
os.O_WRONLY //只写
os.O_RDWR //读写文件
os.O_APPEND //追加文件
os.O_CREATE //不存在时创建文件
os.O_TRUNC //打开时截断文件
检查文件是否存在
package main

import (
"log"
"os"
) var (
fileInfo *os.FileInfo
err error
) func main() {
fileInfo, err := os.Stat("test.txt")
if err != nil {
if os.IsNotExist(err) {
log.Fatal("File does not exist.")
}
}
log.Println("File does exist.File information:")
log.Println(fileInfo)
}
检查文件的读写权限
package main

import (
"log"
"os"
) func main() {
file, err := os.OpenFile("test.txt", os.O_WRONLY, 0666)
if err != nil {
if os.IsPermission(err) {
log.Println("Error:Write permission denied.")
}
}
file.Close()
file, err = os.OpenFile("test.txt", os.O_RDONLY, 0666)
if err != nil {
if os.IsPermission(err) {
log.Println("Error:Read permission denied.")
}
}
file.Close()
}
改变文件的权限、所有权和时间戳
package main

import (
"log"
"os"
"time"
) func main() {
//改变权限
err := os.Chmod("test.txt", 0777)
if err != nil {
log.Println(err)
} //改变所有权 适用于linux, windows不支持
err = os.Chown("test.txt", os.Getuid(), os.Getegid())
if err != nil {
log.Println(err)
} //改变时间戳
twoDaysFromNow := time.Now().Add(48 * time.Hour)
lastAccessTime := twoDaysFromNow
lastModifyTime := twoDaysFromNow
err = os.Chtimes("test.txt", lastAccessTime, lastModifyTime)
if err != nil {
log.Println(err)
}
}
复制文件
package main

import (
"io"
"log"
"os"
) func main() {
//打开原文件
originalFile, err := os.Open("test.txt")
if err != nil {
log.Fatal(err)
}
defer originalFile.Close() //创建新文件
newFile, err := os.Create("test_copy.txt")
if err != nil {
log.Fatal(err)
}
defer newFile.Close() //文件复制
bytes, err := io.Copy(newFile, originalFile)
if err != nil {
log.Fatal(err)
}
log.Printf("Copied %d bytes.", bytes) err = newFile.Sync()
if err != nil {
log.Fatal(err)
}
}
移动位置
package main

import (
"fmt"
"log"
"os"
) func main() {
file, err := os.Open("test.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
var offset int64 = 5 var whence int = 0
newPos, err := file.Seek(offset, whence)
if err != nil {
log.Fatal(err)
}
fmt.Println("Just moved to 5:", newPos) newPos, err = file.Seek(-2, 1)
if err != nil {
log.Fatal(err)
}
fmt.Println("Just moved back two:", newPos) currentPos, err := file.Seek(0, 1)
fmt.Println("current pos:", currentPos) newPos, err = file.Seek(0, 0)
if err != nil {
log.Fatal(err)
}
fmt.Println("position after seek 0,0:", newPos)
}
向文件中写入字节
package main

import (
"log"
"os"
) func main() {
file, err := os.OpenFile("test.txt", os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
if err != nil {
log.Fatal(err)
}
defer file.Close() bytes := []byte("测试写入功能!")
bw, err := file.Write(bytes)
if err != nil {
log.Fatal(err)
}
log.Printf("Wrote %d bytes.\n", bw)
}
快速写入文件
package main import (
"io/ioutil"
"log"
) func main() {
err := ioutil.WriteFile("test.text", []byte("测试快速写入功能!"), 0666)
if err != nil {
log.Fatal(err)
}
}
在写入时使用缓存
package main

import (
"bufio"
"log"
"os"
) func main() {
file, err := os.OpenFile("test.txt", os.O_WRONLY, 0666)
if err != nil {
log.Fatal(err)
}
defer file.Close() buffer := bufio.NewWriter(file)
bw, err := buffer.Write([]byte{65, 66, 67})
if err != nil {
log.Fatal(err)
}
log.Printf("Bytes written:%d\n", bw)
bw, err = buffer.WriteString("\n写入字符串")
if err != nil {
log.Fatal(err)
}
log.Printf("Bytes written: %d\n", bw) unFlushedBuffer := buffer.Buffered()
log.Printf("Bytes buffered:%d\n", unFlushedBuffer) ba := buffer.Available()
log.Printf("Available buffer: %d\n", ba) buffer.Flush() buffer.Reset(buffer) ba = buffer.Available()
log.Printf("Availabled buffer:%d\n", ba) buffer = bufio.NewWriterSize(buffer, 8000)
ba = buffer.Available()
if err != nil {
log.Fatal(err)
}
log.Printf("Available buffer: %d\n", ba) }
从文件中读取n个字节
package main

import (
"log"
"os"
) func main() {
file, err := os.Open("test.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
//从文件中读取16个字节
bytes := make([]byte, 16)
br, err := file.Read(bytes)
if err != nil {
log.Fatal(err)
} log.Printf("number of bytes read: %d\n", br)
log.Printf("Data read: %s\n", bytes)
}
读取文件中全部内容
data, err := ioutil.ReadAll(file)
快速读取文件到内存中
package main

import (
"log"
"io/ioutil"
) func main() {
data, err := ioutil.ReadFile("test.txt")
if err != nil {
log.Fatal(err)
} log.Printf("Data read: %s\n", data)
}

Go标准库之读写文件(File)的更多相关文章

  1. 用 #include “filename.h” 格式来引用非标准库的头文件

    用 #include “filename.h” 格式来引用非标准库的头文件(编译器将 从用户的工作目录开始搜索) #include <iostream> /* run this progr ...

  2. 用 #include <filename.h> 格式来引用标准库的头文件

    用 #include <filename.h> 格式来引用标准库的头文件(编译器将从 标准库目录开始搜索). #include <iostream> /* run this p ...

  3. c/c++标准库中的文件操作总结

    1 stdio.h是c标准库中的标准输入输出库 2 在c++中调用的方法 直接调用即可,但是最好在函数名前面加上::,以示区分类的内部函数和c标准库函数. 3 c标准输入输出库的使用 3.1 核心结构 ...

  4. C++标准库实现WAV文件读写

    在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 ...

  5. Python 标准库 csv —— csv 文件的读写

    csv 文件,逗号分割文件. 0. 读取 csv 到 list from csv import reader def load_csv(csvfile): dataset = [] with open ...

  6. 标准I/O读写文件

    一.函数原型 1.FILE *fopen(const char *path, const char *mode); path:要打开文件路径及文件名: mode:  r 打开只读文件,该文件必须存在. ...

  7. python --标准库 路径与文件 (os.path包, glob包)

    os.path包 os.path包主要是处理路径字符串,提取出有用信息. #coding:utf-8 import os.path path = 'D:\\Python7\\test\\data.tx ...

  8. C++标准库头文件找不到的问题

    当你写C++程序时,在头文件中包含C++标准库的头文件,比如#include <string>,而编译器提示你找不到头文件! 原因就是你的实现源文件扩展名是".c"而不 ...

  9. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

随机推荐

  1. Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS

    [Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS] 1.通过 VPOS / WPOS 语义获取. VPOS 是 HLSL 中 对 屏幕 坐标 的 语义, 而 WPOS 是 ...

  2. ASP.NET Boilerplate-AbpSession

    /------2016-05-15/------介绍 如果一个应用支持登录,也许需要知道当前登录用户的一些操作,然而ASP.NET 本身对于展现层提供了Session的支持,ABP提供了 IAbpSe ...

  3. 微信小程序记账本进度二

    二.1,下载微信web开发者工具 2,使用新注册的账号登录,并创建工程

  4. 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯

    关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...

  5. Head First Servlets & JSP 学习笔记 第六章 —— 会话状态

    MVC中的M(模型),通常就是一个普通的类,这个类里面的信息就是业务逻辑. 会话(Session) 我们可以使用一个HttpSession对象,来保存横跨多个请求的会话状态. HTTP协议使用的是无状 ...

  6. Linux驱动之同步、互斥、阻塞的应用

    同步.互斥.阻塞的概念: 同步:在并发程序设计中,各进程对公共变量的访问必须加以制约,这种制约称为同步. 互斥机制:访问共享资源的代码区叫做临界区,这里的共享资源可能被多个线程需要,但这些共享资源又不 ...

  7. Linux驱动之按键驱动编写(中断方式)

    在Linux驱动之按键驱动编写(查询方式)已经写了一个查询方式的按键驱动,但是查询方式太占用CPU,接下来利用中断方式编写一个驱动程序,使得CPU占有率降低,在按键空闲时调用read系统调用的进程可以 ...

  8. 最短路径(SP)问题相关算法与模板

    相关概念: 有向图.无向图:有向图的边是双行道,无向图的边是单行道.在处理无向图时,可以把一条无向边看做方向相反的两条有向边. 圈 cycle / 回路 circuit:在相同顶点上开始并结束且长度大 ...

  9. 单系统登录机制SSO

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...

  10. vnc 搭建 转

    这里要注意,关闭selinux setenforce 0 原文地址: http://www.linuxidc.com/Linux/2015-04/116725.htm 这是一个关于怎样在你的 Cent ...