为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
天涯尽头无女友 2023-06-26 16:51:27
我有一个名为 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 不会删除第一次出现的 delim
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

首先要事。如果您正确处理错误,您就可以找出代码不起作用的原因。您忽略了调用时引发的错误iotuil.ReadFile(text)。只需添加适当的治疗,您就会清楚为什么它不起作用

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

: 没有这样的文件或目录

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

“ 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))

}


查看完整回答
反对 回复 2023-06-26
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

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


var namefile string

fmt.Scan(&namefile)


content, err := ioutil.ReadFile(namefile)

if err != nil {

    log.Fatal(err)

}

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


查看完整回答
反对 回复 2023-06-26
  • 2 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信