2016-01-29 51 views
3

我想上運行我的旅途文件中讀取輸入文件名我input.txt在我的圍棋程序會讀取input.txt文件,當我在旅途中運行命令即鍵入:Golang如何去

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。沒有任何其他軟件包可以做到嗎?

回答

3

請查看您已使用的包裝文檔io/ioutil

它有一個功能,正是這個:ReadFile()

func ReadFile(filename string) ([]byte, error) 

用法示例:

func main() { 
    // First element in os.Args is always the program name, 
    // So we need at least 2 arguments to have a file name argument. 
    if len(os.Args) < 2 { 
     fmt.Println("Missing parameter, provide file name!") 
     return 
    } 
    data, err := ioutil.ReadFile(os.Args[1]) 
    if err != nil { 
     fmt.Println("Can't read file:", os.Args[1]) 
     panic(err) 
    } 
    // data is the file content, you can use it 
    fmt.Println("File content is:") 
    fmt.Println(string(data)) 
} 
0

杉杉您檢查所提供的參數。如果第一個參數滿足輸入文件的條件,則使用ioutil.ReadFile方法,提供參數os.Args結果。

package main 

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

func main() { 
    if len(os.Args) < 1 { 
     fmt.Println("Usage : " + os.Args[0] + " file name") 
     os.Exit(1) 
    } 

    file, err := ioutil.ReadFile(os.Args[1]) 
    if err != nil { 
     fmt.Println("Cannot read the file") 
     os.Exit(1) 
    } 
    // do something with the file 
    fmt.Print(string(file)) 
} 

另一種可能是使用:

f, err := os.Open(os.Args[0]) 

但對於這個,你需要提供字節lenght閱讀:

b := make([]byte, 5) // 5 is the length 
n, err := f.Read(b) 
fmt.Printf("%d bytes: %s\n", n, string(b)) 
0

對於通過運行命令行。去文件輸入參數如文件(例如abc.txt)。我們需要主要使用os,io/ioutil,fmt包。另外,用於讀取命令行參數,我們使用 os.Args下面是示例代碼

package main 
import (
    "fmt" 
    "os" 
    "io/ioutil" 
) 
func main() { 
fmt.Println(" Hi guys ('-') ") 
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 Output 
fmt.Println("Output file content is(like byte type) : \n",content)//bytes Output 
} 
} 
} 

參數數量保持命令行參數,包括命令作爲參數數量[0]。 如果Args字段爲空或零,則Run使用{Path}。 在典型的使用中,通過調用Command來設置Path和Args。 參數[]字符串 函數。此函數返回字符串類型爲https://golang.org/pkg/os/exec/的數組.Args保存命令行參數,從程序名稱開始。在這種情況下從命令行採取文件名的簡短方式是這個功能os.Args [1:]。這裏是輸出

elshan_abd$ go run main.go abc.txt 
Hi guys ('-') 
File_name is : abc.txt 
Output file content is(like string type) : 
aaa 
bbb 
ccc 
1234 
Output file content is(like byte type) : 
[97 97 97 10 98 98 98 10 99 99 99 10 49 50 51 52 10] 

最後,我們需要閱讀的內容文件這一功能 func ReadFile(filename string) ([]byte, error)https://golang.org/pkg/io/ioutil/#ReadFile

+0

感謝編輯托馬斯 –