Go基礎編程實踐(六)—— 文件

来源:https://www.cnblogs.com/GaiHeiluKamei/archive/2019/07/06/11141110.html
-Advertisement-
Play Games

檢查文件是否存在 在此程式同目錄下創建log.txt文件,以檢測。 檢查文件是否不存在 讀取文件內容 在此程式同目錄下創建name.txt文件,以檢測。 寫入文件 在此程式同目錄下創建hello_world文件。 創建臨時文件 計算文件行數 在程式同目錄下創建"names.txt"文件,隨便寫幾行字 ...


檢查文件是否存在

在此程式同目錄下創建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())
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這12個問題,基本上就是HTML和CSS基礎中的重點難點了,也是必須要弄清楚的基本問題,其中定位的絕對定位和相對定位到底相對什麼定位?這個還是容易被忽視的,浮動也是一個大坑,有很多細節。 這12個知識點是我個人認為的,下麵我們就來看看這12個知識點。 1.怎麼讓一個不定寬高的 DIV,垂直水平居中? ...
  • SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如無特殊說明,本系列教程全採用以上版本 隨著分散式項目越來越大,勤勞的程式猿們會開始面臨 ...
  • extern可置於變數或者函數前,以表示變數或者函數的定義在別的文件中,提示編譯器遇到此變數和函數時在其他模塊中尋找其定義。 另外,extern也可用來進行鏈接指定。用法分析: 在一個變數前加extern 比如:extern unsigned int Test;編譯器編譯的時候,會把Test當成是外 ...
  • 工廠模式的使用場景、讓自己的代碼解耦更優雅。包含簡單工廠、工廠方法、抽象工廠。一文就夠了 ...
  • 為了更好地支持交易業務的快速發展,馬蜂窩支付中心從最初只支持基礎支付和退款的「刀耕火種」階段,經歷了架構調整的「刮骨療傷」階段,完成了到實現綜合產品平臺形態的「沉澱蓄力」階段的演進。 目前,馬蜂窩支付中心集成了包括基礎訂單、收銀台、路由管理、支付通道、清算核對、報表統計等多種能力,為馬蜂窩度假(平臺 ...
  • 這一章總結了我們旅程中的發現。它強調了我們在這個過程中所學到的最重要的經驗教訓,提出瞭如果我們用新知識開始這段旅程,我們將以不同的方式做的一些事情,並指出了Contoso會議管理系統的一些未來道路。 ...
  • java 手寫 jvm高性能緩存,鍵值對存儲,隊列存儲,存儲超時設置 緩存介面 package com.ws.commons.cache; public interface ICache { void expire(String key, int timeOutSecond); void leftP ...
  • 基本輸出 python中的輸出使用關鍵字--print,與python2不同的是,python3的輸出後面必須要加括弧,示例如下: python3.0以上輸出: python2.0以上的輸出: 格式化的輸出 在程式中看到輸出的語句存在%(占位符),那麼這就是表示格式化的輸出 換行輸出 如果在輸出的語 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...