Есть ли способ использовать сканер для создания набора объектов из чтения файла? - PullRequest
0 голосов
/ 01 октября 2019

Мне было интересно, есть ли способ, чтобы сканер прочитал файл в java и скомпилировал его в объект массива, например, если читаемый файл имеет тот же базовый формат атрибутов рабочих всущество файла;Имя, Payrate (с плавающей точкой), навыки 1 (с плавающей точкой), навыки 2 (с плавающей точкой), затем повторите его после введения нового работника. Например:

файл "worker.txt":

Переполнение Боба Полная занятость 12.50 phr Живопись .45 резьба .85

Сьюзен Нэсус неполный рабочий день 7.50 phr живопись. 80 carving .25

, затем скомпилируйте его, чтобы он был рабочим 1, рабочим 2, рабочим 3 и т. Д. С заданными атрибутами в массив.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class RaceCarOne
{
        public static void main(String args[]) throws FileNotFoundException 
        {
            //creating File instance to reference text file in Java
            File text = new File("C:\\Users\\jayli\\Desktop\\Workers.txt");
            //Creating Scanner instance to read File in Java
            Scanner s = new Scanner(text);
            //Reading each line of file using Scanner class
            int lineNumber = 1;
            while(s.hasNextLine())
            {
                String line = s.nextLine();
                System.out.println("line " + lineNumber + " :" + line);
                lineNumber++;
            }          
            s.close();  
        }   
}

class Worker 
{
    File text = new File("C:\\Users\\jayli\\Desktop\\Workers.txt");

    Scanner s = new Scanner(text);

    String Name;
    int WorkHours;
    int Fab;
    int Serv;
    int Diag;
    int Trans;
    int Intake;
    int BW;
    int Paint;
    boolean working = false;

    Worker(String workername, float pay, float Fab, float Serv, float Diag, float Trans, float Intake, float BW, float Paint)
    {
        while(s.hasNextLine())
        {

        workername = s.nextLine();
        pay = s.nextInt();
        Fab = s.nextInt();
        Serv = s.nextInt();
        Diag = s.nextInt();
        Trans = s.nextInt();
        Intake = s.nextInt();
        BW = s.nextInt();
        Paint = s.nextInt();
        }
    }
}

1 Ответ

1 голос
/ 01 октября 2019

Я предлагаю использовать s.nextline (), чтобы получить строку, а затем разделить ее в соответствии с вашими пожеланиями. Для этого вы можете использовать шаблон регулярного выражения, который вы можете протестировать, например, с помощью Regexr . В качестве альтернативы вы можете использовать метод split () и разделить пробелами. Однако, поскольку это вызывает другие проблемы (например, навыки с пробелами в их имени), я согласен с Sweeper в том, что вам, вероятно, следует использовать что-то вроде JSON для ввода.

Кроме того, я думаю, что ваш конструктор для Worker просто зацикливаетсячерез весь файл, и вы всегда будете получать информацию в последней строке.

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