Как найти, прочитать и отобразить строку из текстового файла с помощью Java

#java #file

Вопрос:

У меня есть текстовый файл, содержащий поддельные записи о самолетах. Мне нужно написать код, который найдет запись на основе ее строки идентификатора и отобразит ее. У меня есть основной, классный и текстовый файл. В принципе, пользователь должен иметь возможность ввести «идентификатор», сказать «DA0», и код найдет его и отобразит строку.

  /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package lastassignment;

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

/**
 *
 * @author djiml
 */
public class LastAssignment {
    
    public LastAssignment() {
        
    }
    
    private ArrayList<AirplaneSeatRecords> airplaneSeats = new ArrayList<AirplaneSeatRecords>();
        Scanner scnr = new Scanner(System.in);
        String airlineIndex;
        String name;
        int seat;
        double ticketCost;

    public void OpenRecord() throws IOException {
        FileInputStream inputfile = new FileInputStream("input.txt");
        Scanner inFile = new Scanner(inputfile);
        
        while (inFile.hasNext()) {
            airlineIndex = inFile.next();
            ticketCost = inFile.nextDouble();
            seat = inFile.nextInt();
            name = inFile.nextLine();
            airplaneSeats.add(new AirplaneSeatRecords(airlineIndex, ticketCost, seat, name));
        }
        inFile.close();
    }
    
    public static void main(String[] args) throws IOException {
        Scanner scnr = new Scanner(System.in);
        int input;
        
        
        System.out.println("What would you like to do?:");
        System.out.println("1. Open a Record.");
        System.out.println("2. Display a Record.");
        System.out.println("3. Display All Records.");
        System.out.println("4. Add a New Record.");
        System.out.println("5. Edit a Record.");
        System.out.println("6. Delete a Record.");
        System.out.println("7. Save Progress.");
        System.out.println("8. Exit.");
        System.out.print(": ");
        
        input = scnr.nextInt();
        
        if (input != 8) {
            
            switch(input) {
            
            case 1 ->  new LastAssignment().OpenRecord();
            
            case 2 -> System.out.println("FIXME: Add 'Display a Record'");
            
            case 3 -> System.out.println("FIXME: Add 'Display All Records'");
            
            case 4 -> System.out.println("FIXME: Add 'Add a New Record'");
            
            case 5 -> System.out.println("FIXME: Add 'Edit a Record'");
            
            case 6 -> System.out.println("FIXME: Add 'Delete a Record'");
            
            case 7 -> System.out.println("FIXME: Add 'Save Progress'");
        
        }
            
        }
        else {
            System.out.println("FIXME: Add 'Exit'");
        }
    }
    
}
 

Файл класса

 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package lastassignment;

/**
 *
 * @author djiml
 */
public class AirplaneSeatRecords {
    private String airlineIndex;
    private double ticketCost;
    private String customerFlying;
    private int seatNum;
    
    public AirplaneSeatRecords() {
        // Constructor
    }
    
    public AirplaneSeatRecords(String ID, double cost, int seat, String name) {
        airlineIndex = ID;
        ticketCost = cost;
        seatNum = seat;
        customerFlying = name;
    }
    
    public void displayTickets() {
        System.out.printf("%8s t %-20s tt $%.2f t %d n", airlineIndex, customerFlying, ticketCost, seatNum);
    }
    
    public String getTicketID() {
        return airlineIndex;
    }
    
    public double getTicketCost() {
        return ticketCost;
    }
    
    public int getSeatNum() {
        return seatNum;
    }
    
    public String getCustomerName() {
        return customerFlying;
    }
    
    public void setSeatNum(int seat) {
        seatNum = seat;
    }
    
    public void setCustomerName(String name) {
        customerFlying = name;
    }
    
    public void setTicketPrice(double price) {
        ticketCost = price;
    }
    
    
}
 

Текстовый файл

 DA0 215.00 19 Doug Anderson
DA1 200.00 20 Drew Bates
DA2 185.00 21 Theresa Patty
DA3 170.00 22 Andrew Abrams
 

Ответ №1:

В case 2 снова запросите у пользователя идентификатор и считайте его с помощью сканера.

Создайте метод, в котором вы повторяете цикл по своему airplaneSeats массиву, и если введенный идентификатор совпадает с идентификатором одного из элементов AirplaneSeatRecords в вашем массиве, затем распечатайте запись и разорвите цикл. У вас уже есть необходимые методы для этого в AirplaneSeatRecords классе.

Кроме того, не забудьте добавить регистр по умолчанию в инструкцию switch.

Комментарии:

1. Это switch выражение , оно не нуждается break в s.

2. @FedericoklezCulloca спасибо вам за ваш комментарий! Я узнал кое-что новое 🙂 Я знаком только с Java 8, поэтому я не знал о новых функциях и синтаксисе для switch оператора в более поздних версиях. Я соответствующим образом отредактировал свой ответ. Однако это default дело все еще актуально?

3. Да, выражение переключателя должно быть исчерпывающим, поэтому в данном случае default оно необходимо.

4. Что вы подразумеваете под повторением в цикле? И какой метод из записей о сиденьях в самолете?

5. @YuliyaSheludyakova Вместо этого я использовала цикл «для каждого», но спасибо! Ваш комментарий мне очень помог!