Возникли проблемы с классом сканера - PullRequest
1 голос
/ 22 марта 2020

Я использую класс 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);
            }
        }
    }
}

В моем коде есть некоторые турки sh Строки, поэтому позвольте мне объяснить. Если пользователь выбирает 3, программа переходит к записи данных в файл.

1 Ответ

1 голос
/ 22 марта 2020

Попробуйте ввести номер nubmer int user_choice = Integer.parseInt(s.nextLine());

...