Как я могу извлечь элементы из файла, когда это необходимо? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь написать программу для создания объектов проигрывателя и сохранения их в файл (что я и сделал). Проблема, которую я пытаюсь решить, заключается в том, что я хочу иметь возможность извлекать плееры из файла, когда это необходимо. Так что, если я хочу получить информацию только для игрока 1 или игрока n, просто с их подробностями, есть ли способ извлечь ее из файла, если это необходимо?

Любая помощь или идеи будут с благодарностью.

Большое спасибо за вашу помощь заранее.

package p;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Runner {

    public static final Scanner input = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        FileWriter writer = new FileWriter("output.txt", true);
        PlayerData player = null;
        List<PlayerData> players = new ArrayList<>();

        System.out.println("How many players do you want to register? : ");
        int num = input.nextInt();

        while (true) {

            System.out.println("Plz enter Name : ");
            String name = input.next();
            writer.write("Name: " + name + System.lineSeparator());

            System.out.println("Plz enter age : ");
            String age = input.next();
            writer.write("Age: " + age + System.lineSeparator());

            System.out.println("Plz enter Player_id : ");
            String player_id = input.next();
            writer.write("Player_id: " + player_id + System.lineSeparator());

            System.out.println("Plz enter agent_id : ");
            String agent_id = input.next();
            writer.write("Agent_id:" + agent_id + System.lineSeparator());

            System.out.println("Plz enter status : ");
            String status = input.next();
            writer.write("Status: " + status + System.lineSeparator());

            System.out.println("Plz enter position : ");
            String position = input.next();
            writer.write("Position: " + position + System.lineSeparator());

            System.out.println("Plz enter valuation : ");
            Double valuation = input.nextDouble();
            writer.write("Value: " + valuation + System.lineSeparator());
            writer.write("\n " + System.lineSeparator());

            System.out.println("\n");
            player = new PlayerData(name, age, player_id, agent_id, valuation, status, position);
            players.add(player);

            System.out.println("Information Entered: \n" + player + "\n" + "Name : " + name + "\n" + "Age: " + age
                    + "Player id: " + player_id + "\n" + "Agent id: " + agent_id + "\n" + "Player Value: " + valuation
                    + "\n" + "Player Status:" + status + "\n" + "Player position:" + position + "\n");

            writer.close();
            if (players.size() == num)

                break;
        }

        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("output.txt")));
        String line = " ";
        System.out.println("Current Players on the transfer List \n");
        while ((line = reader.readLine()) != null) {

            System.out.println(line);

        } // while

        reader.close();// close reader

    }

}

Ответы [ 2 ]

1 голос
/ 08 января 2020

Возможно, что-то в этом роде, сначала пока l oop приведет вас к месту, где имя игрока совпадает с вашим введенным именем, затем пока следующие 7 строк попадут в список информации об игроке.

public FileReader fr = new FileReader("path/to/your/file");
public BufferedReader br = new BufferedReader(fr);
String playerName = "John";
String line;
List<String> playerInfo = new ArrayList<String>();
while((line =  br.readLine()) != null){
 if (line.contains(playerName))
 {
    int numLines = 7;
    playerInfo.add(line);
    while((line =  br.readLine()) != null && numLines >= 1){
        playerInfo.add(line);
        numLines --;
        break;
    }
    break;
 }
}
1 голос
/ 08 января 2020

Вы можете попробовать использовать Java Сериализация объектов:

Java Сериализация объектов (Oracle)

Я думаю, независимо от того, используете ли вы текущий Метод или сериализация объектов, вы можете сохранить каждого игрока в другой файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...