我有一个名为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
答案 0 :(得分:3)
第一件事。如果简单地正确处理错误,就可以弄清楚为什么代码不起作用。您将忽略调用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))
}
答案 1 :(得分:2)
在这种情况下,我认为您最好进行简单扫描:
var namefile string
fmt.Scan(&namefile)
content, err := ioutil.ReadFile(namefile)
if err != nil {
log.Fatal(err)
}
而不是添加一个 \n 然后将其删除。