【问题标题】:Having trouble with Scanner class扫描仪类有问题
【发布时间】:2020-03-22 13:21:39
【问题描述】:

我正在使用 Scanner 类来获取文件名。但是我的 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();
        }
    }

编辑我的菜单类:

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 程序去将数据写入文件。

【问题讨论】:

  • 我们需要更多信息。您如何创建扫描仪?你在扫描什么/你是如何获得输入的?
  • 您是否像这样声明了扫描仪 Scanner in = new Scanner(System.in)?
  • 我编辑添加了我的菜单类的完整代码。 n现在你可以看到了。
  • @am0awad 是的,我就是这样用的

标签: java serialization io java.util.scanner fileoutputstream


【解决方案1】:

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

【讨论】:

  • 成功了。但我很好奇扫描仪是如何工作的。扫描仪仅与 1 种类型的值兼容?我的意思是,我需要 2 台扫描仪来获取 2 种不同类型的值。
  • 因为parseInt() 只读取数字,而不是整行,如果您想使用它。把nextLine()
  • @BaranSAHİN - 我建议您阅读 Scanner 的 javadoc 或查找解释其工作原理的教程。与我们通过 cmets 或其他方式为您提供个人辅导相比,您进行一些阅读(作为一种学习方式)要高效得多。
  • 我在网上搜索了有关 Scanner 的信息。我无法确切理解它是如何工作的。因为源代码比我想象的要复杂,但我的问题已解决。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多