Попытка сохранить переменные из txt-файла

#java #readfile

Вопрос:

Я пытаюсь прочитать файл и сохранить каждую переменную из файла в нужном месте, которое я хочу сохранить из файла , как Имя, фамилия, доллар в час. Затем после этого распечатайте каждого человека отдельно вместе с уравнением для решения их проверки за неделю, но я понятия не имею, как хранить, а затем позвоните правильно от каждого отдельного человека

 public class Workers {

    private String FirstName;
    private String LastNAme;
    private  int HoursWorked;
    private int DollarPerHour;

    public String getFirstName() {
        return FirstName;
    }

    public void setFirstName(String firstName) {
        FirstName = firstName;
    }

    public String getLastNAme() {
        return LastNAme;
    }

    public void setLastNAme(String lastNAme) {
        LastNAme = lastNAme;
    }

    public int getHoursWorked() {
        return HoursWorked;
    }

    public void setHoursWorked(int hoursWorked) {
        HoursWorked = hoursWorked;
    }

    public int getDollarPerHour() {
        return DollarPerHour;
    }

    public void setDollarPerHour(int dollarPerHour) {
        DollarPerHour = dollarPerHour;
    }

    @Override
    public String toString() {
        return "Workers{"  
                FirstName   LastNAme   
                ", Has Worked "   HoursWorked   "hours this week"  
                "and makes "   DollarPerHour  
                "a hour";
    }
}
 

 import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Main extends Workers {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        try{
            BufferedReader reader = new BufferedReader(new FileReader("src/WorkersAndPay.txt"));
            String file = reader.readLine();
            while (file != null){
                System.out.println(file);
                file = reader.readLine();

            }
            reader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
 

мой txt-файл настроен следующим образом

 Michael,Zargosa,14
MAx,SMith,15
Judith,Smith,16
 

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

1. Я предлагаю вам использовать настоящую библиотеку CSV, а не BufferedReader просто разбирать ее на объекты Java. Но что именно вы не понимаете в своей line переменной, чтобы разделить или разобрать ее на отдельные компоненты? Также extends Workers следует удалить

Ответ №1:

Если все ваши строки отформатированы как [Имя],[Фамилия],[Отработанные часы] (я предполагаю, что ваше числовое значение-это ваши отработанные часы, а не «доллары в час»), например, вы можете просто использовать метод разделения над вашим объектом line (странно называемый файл). :

 String[] data = file.split(",");
 

Теперь у вас есть массив строк, подобных этому: [«Майкл», «Заргоса», «14»]
Вам все равно нужно преобразовать строку «14» в int, что можно сделать следующим образом :

Целое число.Синтаксический анализ(…)

В конце концов, вы могли бы написать метод, превращающий вашу строку в рабочий объект :

 private static Workers createFromLine(final String line) {
    Workers worker = null;
    if(line != null) {
        worker = new Workers();
        String[] data = line.split(",");
        int workedHours = Integer.parseInt(data[2]);
    
        worker.setFirstName(data[0]);
        worker.setLastNAme(data[1]);
        worker.setHoursWorked(workedHours);
    }

    return worker; 
}
 

Более элегантный и безопасный способ сделать это, вероятно, состоял бы в извлечении данных на основе регулярных выражений. Минимальная реализация может включать проверку соответствия вашей строки этому регулярному выражению: w ,w ,d


Ваш класс «Main» не должен наследовать (расширяться) Рабочий класс, так как это не имеет смысла. Я действительно не знаю, что вы пытаетесь сделать, но если вы хотите, чтобы ваш основной метод использовал или «содержал» (экземпляры) класса Workers, нет необходимости в наследовании класса от рабочих.

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

1. да, прошло некоторое время с тех пор, как я изучал основы, поэтому вернулся, чтобы освежить свои мысли, похоже, мне нужно много освежиться

2. Чтобы убедиться, что Ваши личные статические работники создают исходную строку(последнюю строковую строку) после того, как я уже правильно прочитал файл

Ответ №2:

    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader(new File("./WorkersAndPay.txt")));
            while (br.ready()) {
                String line = br.readLine();
                if (line == null){continue;}
                String[] words = line.split(",");
                Workers worker = new Workers();
                worker.setFirstName(words[0]);
                worker.setLastName(words[1]);
                worker.setHoursWorked(Integer.parseInt(words[2]));
                System.out.println(worker.toString());
            }
            br.close();
        } 
        catch (IOException e) {e.printStackTrace();}
    }
 

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

1. Это хорошо печатается, но в конце я получаю это исключение в потоке «main» java.lang. Исключение NullPointerException: Не удается вызвать «String.split(строка)», потому что «файл» равен нулю в Main.main(Main.java:20)

Ответ №3:

 import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Main  {


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);


        try {
            BufferedReader reader = new BufferedReader(new FileReader("src/WorkersAndPay.txt"));
            String file = reader.readLine();
            while (file != null){
                file = reader.readLine();
                String[] data = file.split(",");
                Workers worker = new Workers();
                worker.setFirstName(data[0]);
                worker.setLastName(data[1]);
                worker.setHoursWorked(Integer.parseInt(data[2]));
                worker.setDollarPerHour(Integer.parseInt(data[3]));
                System.out.println(worker.toString());


            }

            reader.close();


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


//I did this and it prints out also change my txt to be see up like 
//firstname,lastname,hourswroked,dallorPerhour
 /* change to string to 
@Override
public String toString() {
    return "Workers{"  
            firstName   " "  lastName  
            ", Has Worked "   hoursWorked   " hours this week Check will be: " 
            (dollarPerHour * hoursWorked)   " $ ";

}

*/



/*
Workers{Michael Murillo, Has Worked 50 hours this week Check will be: 550 $ 
Workers{Max Murillo, Has Worked 49 hours this week Check will be: 637 $ 
Workers{Eddie Murillo, Has Worked 50 hours this week Check will be: 700 $ 
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.split(String)" because "file" is null
    at Main.main(Main.java:19)
 

*/