Scanner 类有问题

Having trouble with Scanner class

提问人:Baran 提问时间:3/22/2020 最后编辑:Baran 更新时间:3/22/2020 访问量:37

问:

我正在使用 Scanner 类来获取文件名。但是我的扫描仪甚至没有问我任何字符串。它只是将输入的字符串设置为“”(空字符串)。然后我得到文件未找到异常。另一个问题是,我正在使用 FileOutputStream 编写文件。如果不存在,它不应该创建文件吗?这是我使用扫描仪的部分代码。

else if(user_choice == 3){
                System.out.println("kaydedilecek dosyanın ismini giriniz : ");
                String file_name = s.nextLine();
                IOdata iod = new IOdata(data);
                iod.save_data(file_name);

下面的代码是关于 IO 的。

public void save_data(String file_name) throws IOException {
        try {
            FileOutputStream fos = new FileOutputStream(file_name);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(data);
            oos.close();
        }catch (FileNotFoundException e){
            file_name = "default";
            FileOutputStream fos = new FileOutputStream(file_name);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(data);
            oos.close();
        }
    }

编辑完整的 Menu 类:

import java.io.IOException;
import java.util.Scanner;

public class Menu {
    public Menu() throws IOException {
        Scanner s = new Scanner(System.in);
        Data data = new Data();
        while(true){
            System.out.println("1-data oluştur");
            System.out.println("2-datayı yükle");
            System.out.println("3-datayı kaydet");
            System.out.println("4-çıkış");
            System.out.println("5-yazdır");
            int user_choice = s.nextInt();
            if(user_choice == 4) {
                break;
            }else if(user_choice == 1){
                DataManupilator dm = new DataManupilator(data);
                System.out.println("datanın uzunluğunu giriniz : ");
                int length = s.nextInt();
                data = dm.generate_data(length);
            }else if(user_choice == 5){
                data.print_items();
            }else if(user_choice == 3){
                System.out.println("kaydedilecek dosyanın ismini giriniz : ");
                String file_name = s.nextLine();
                IOdata iod = new IOdata(data);
                iod.save_data(file_name);
            }else if(user_choice == 2){
                System.out.println("datanın bulunduğu dosyanın ismini giriniz : ");
                String file_name = s.nextLine();
                IOdata iod = new IOdata(data);
                iod.save_data(file_name);
            }
        }
    }
}

我的代码中有一些土耳其语字符串,所以让我解释一下。如果用户选择 3 程序,则将数据写入文件。

Java 序列化 IO java.util.scanner 文件输出流

评论

0赞 cegredev 3/22/2020
我们需要更多的信息。如何创建扫描仪?你在扫描什么/你如何获得输入?
0赞 0xh3xa 3/22/2020
您是否在 = new Scanner(System.in) 中声明了像这样的扫描仪?
0赞 Baran 3/22/2020
我编辑以添加我的 Menu 类的完整代码。 n现在你可以看到。
0赞 Baran 3/22/2020
@am0awad 是的,我用过这种方式

答:

1赞 0xh3xa 3/22/2020 #1

试试这个来输入选择nubmerint user_choice = Integer.parseInt(s.nextLine());

评论

0赞 Baran 3/22/2020
成功了。但我对扫描仪的工作原理感到好奇。扫描仪仅兼容 1 种类型的值?我的意思是,我需要 2 个扫描仪来获得 2 种不同类型的值。
0赞 0xh3xa 3/22/2020
因为只读取数字,而不是整行,如果你想使用它。放parseInt()nextLine()
0赞 Stephen C 3/22/2020
@BaranSAHİN - 我建议您阅读 javadoc 或查找解释其工作原理的教程。对你来说,做一些阅读比我们通过评论或其他方式给你个人指导要高效和有效得多(作为一种学习方式)。Scanner
0赞 Baran 3/22/2020
我在互联网上搜索了 Scanner。我无法确切地理解它是如何工作的。因为源代码比我想象的要复杂,但我的问题解决了。谢谢你的帮助。