我想通过将文件名作为GoLang中的用户输入来读取文件

时间:2019-06-20 01:19:01

标签: go

我有一个名为example.json的JSON文件。我需要通过将其名称作为用户输入来读取该文件。我已经尝试使用以下代码。

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter text: ")
    text,_ := reader.ReadString('\n')


    fmt.Println(text)

    file,_ := ioutil.ReadFile(text)
    // os.Exit()
    fmt.Print(file)
}

但是它不能正常工作。我想将JSON文件名作为命令行输入并读取JSON文件。

我用以下方法检查。但这与我的情况不符。

reader.ReadString does not strip out the first occurrence of delim

2 个答案:

答案 0 :(得分:3)

第一件事。如果简单地正确处理错误,就可以弄清楚为什么代码不起作用。您将忽略调用iotuil.ReadFile(text)时引发的错误。 只需添加适当的治疗方法,您将有一个很好的提示为什么它不起作用

file, err := ioutil.ReadFile(text)
if err != nil {
    log.Fatal(err)
}
  

:没有这样的文件或目录

您的程序无法运行的原因很可能是因为text变量中有一个换行符。

来自Go Documentation

  

ReadString读取直到输入中第一次出现delim为止,   返回一个字符串,该字符串包含直至(包括)   定界符。

从保存用户输入的变量中删除类似符的换行符,并且假定输入实际上与包含正确路径的现有文件匹配,该字符应该可以工作。

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter text: ")
    text, _ := reader.ReadString('\n')

    text = strings.TrimSuffix(text, "\n")

    //Add the file path
    //or else the user will be required to enter the entire file location
    f := "path_to_the_file" + text 

    file, err := ioutil.ReadFile(f)

    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(file))
}

答案 1 :(得分:2)

在这种情况下,我认为您最好进行简单扫描:

var namefile string
fmt.Scan(&namefile)

content, err := ioutil.ReadFile(namefile)
if err != nil {
    log.Fatal(err)
}

而不是添加一个 \n 然后将其删除。