猿问

Golang 如何在 Go 中读取输入文件名

我想input.txt在我的 go 程序将input.txt在我输入 go run 命令时读取文件的地方运行我的 go 文件,即:

go run goFile.go input.txt

我不想input.txt输入我的goFile.go代码,因为我的 go 文件应该在任何输入名称上运行,而不仅仅是input.txt.

我尝试ioutil.ReadAll(os.Stdin)但我需要将我的命令更改为

go run goFile.go < input.txt

我只用包fmtosbufioio/ioutil。是否可以在没有任何其他软件包的情况下做到这一点?


慕标琳琳
浏览 279回答 3
3回答

MM们

请查看io/ioutil您已经在使用的软件包文档。它有一个专门用于此的功能: ReadFile()func ReadFile(filename string) ([]byte, error)用法示例:func main() {&nbsp; &nbsp; // First element in os.Args is always the program name,&nbsp; &nbsp; // So we need at least 2 arguments to have a file name argument.&nbsp; &nbsp; if len(os.Args) < 2 {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("Missing parameter, provide file name!")&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }&nbsp; &nbsp; data, err := ioutil.ReadFile(os.Args[1])&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("Can't read file:", os.Args[1])&nbsp; &nbsp; &nbsp; &nbsp; panic(err)&nbsp; &nbsp; }&nbsp; &nbsp; // data is the file content, you can use it&nbsp; &nbsp; fmt.Println("File content is:")&nbsp; &nbsp; fmt.Println(string(data))}

慕森卡

首先检查提供的参数。如果第一个参数满足输入文件的条件,则使用该ioutil.ReadFile方法,提供参数os.Args结果。package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "os"&nbsp; &nbsp; "io/ioutil")func main() {&nbsp; &nbsp; if len(os.Args) < 1 {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("Usage : " + os.Args[0] + " file name")&nbsp; &nbsp; &nbsp; &nbsp; os.Exit(1)&nbsp; &nbsp; }&nbsp; &nbsp; file, err := ioutil.ReadFile(os.Args[1])&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("Cannot read the file")&nbsp; &nbsp; &nbsp; &nbsp; os.Exit(1)&nbsp; &nbsp; }&nbsp; &nbsp; // do something with the file&nbsp; &nbsp; fmt.Print(string(file))}另一种可能性是使用:f, err := os.Open(os.Args[0])但为此,您需要提供要读取的字节长度:b := make([]byte, 5) // 5 is the lengthn, err := f.Read(b)fmt.Printf("%d bytes: %s\n", n, string(b))

红糖糍粑

为了通过输入参数(例如 abc.txt)从命令行运行 .go 文件。我们主要需要使用 os、io/ioutil、fmt 包。另外为了读取命令行参数,我们使用 os.Args这里是示例代码package main&nbsp;import (&nbsp; "fmt"&nbsp; "os"&nbsp; "io/ioutil")func main()&nbsp; {fmt.Println(" Hi guys&nbsp; ('-') ")input_files := os.Args[1:]//input_files2 := os.Args[0];//fmt.Println("if2 : ",input_files2)if len(input_files) < 1{fmt.Println("Not detected files.")}else{fmt.Println("File_name is : ",input_files[0])content, err := ioutil.ReadFile(input_files[0])if err != nil {fmt.Println("Can't read file :", input_files[0],"Error : ",err)}else {fmt.Println("Output file content is(like string type) : \n",string(content))//string Outputfmt.Println("Output file content is(like byte type) : \n",content)//bytes Output}}}Args 保存命令行参数,包括作为 Args[0] 的命令。如果 Args 字段为空或为零,则 Run 使用 {Path}。在典型的使用中,Path 和 Args 都是通过调用 Command 来设置的。参数 [] 字符串函数。此函数返回字符串类型的数组https://golang.org/pkg/os/exec/ .Args 保存命令行参数,从程序名称开始。在这种情况下,从命令行获取文件名的简短方法是这个函数os.Args[1:]。这是输出elshan_abd$ go run main.go abc.txtHi guys&nbsp; ('-')File_name is :&nbsp; abc.txtOutput file content is(like string type) :&nbsp;aaabbbccc1234Output file content is(like byte type) :&nbsp;[97 97 97 10 98 98 98 10 99 99 99 10 49 50 51 52 10]&nbsp;最后我们需要读取内容文件这个函数 func ReadFile(filename string) ([]byte, error) 源是 https://golang.org/pkg/io/ioutil/#ReadFile
随时随地看视频慕课网APP

相关分类

Go
我要回答