Стоит задача создавать и записывать обьекты с файла csv. В данный момент стоит задача сделать связь контролера с базой админов, так как в java только начинающий - интересует правильно ли составлен код? А также админ, который залогинится должен будет иметь доступ к остальным админам, правильно ли будет создать еще один метод который добавляет все обьекты админов в ArrayList. ? Хочу услышать комментарии по коду.
Controller:
AOAdmin admin = new DAOAdmin();
Admin admin1 = admin.load("cc12954", "123345");
DAO:
public class DAOAdmin implements AdminDao{
private static final String basePath = "/Users/valik/Desktop/queststore-system-team_power/src/Admins.csv";
public DAOAdmin() {
}
public Admin load(String id, String password) {
try {
FileReader fr = new FileReader(basePath);
BufferedReader br = new BufferedReader(fr);
Scanner scnr = new Scanner(br);
while(scnr.hasNextLine()){
String line = scnr.nextLine();
String nLine [] = line.split(",");
if(nLine[4].equals(id) && nLine[2].equals(password)) {
Admin a = createAdminFromRow(nLine);
return a;
}
}
} catch (IOException e) {
System.out.println("File not found");
}return new Admin();
}
public void saveAdmin(){
System.out.println("not implemented");
}
public Admin createAdminFromRow(String[] nLine){
Admin a = new Admin();
String AdmLogin = nLine[4];
String AdmName = nLine[0];
a.setName(AdmName);
a.setLogin(AdmLogin);
return a;
}
}
Java конвенция раздел Constants
private static final String basePath = "/Users/valik/Desktop/queststore-system-team_power/src/Admins.csv";
Заменяем на
private static final String BASE_PATH = "/Users/valik/Desktop/queststore-system-team_power/src/Admins.csv";
раздел Variables
String AdmLogin = nLine[4];
String AdmName = nLine[0];
Заменяем на
String login = nLine[4];
String name = nLine[0];
Хардкодить полный путь не стоит, используем ресурсы
private static final String FILE_NAME = "Admins.csv";
File csvFile = new File(getClass().getClassLoader().getResource(FILE_NAME).getFile());
Закрываем IO ресурсы и отдельно обрабатываем ошибки
try(Scanner scanner = new Scanner(new BufferedReader(new FileReader(csvFile)))) {
...
} catch (FileNotFoundException e) {
System.err.println("File not found");
} catch (IOException e) {
System.err.println("Failed to read file " + e.getMessage());
}
В итоге получилось
public class DAOAdmin {
private static final String FILE_NAME = "Admins.csv";
public Admin load(String id, String password) {
File csvFile = new File(getClass().getClassLoader().getResource(FILE_NAME).getFile());
try (Scanner scanner = new Scanner(new BufferedReader(new FileReader(csvFile)))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String nLine[] = line.split(",");
if (nLine[4].equals(id) && nLine[2].equals(password)) {
return createAdminFromRow(nLine);
}
}
} catch (FileNotFoundException e) {
System.err.println("File not found");
} catch (IOException e) {
System.err.println("Failed to read file " + e.getMessage());
}
return new Admin();
}
public void saveAdmin() {
System.out.println("not implemented");
}
public Admin createAdminFromRow(String[] nLine) {
Admin admin = new Admin();
String login = nLine[4];
String name = nLine[0];
admin.setName(login);
admin.setLogin(name);
return admin;
}
}
Или используя Java 8
public class DAOAdmin implements AdminDao {
private static final String FILE_NAME = "Admins.csv";
public Admin load(String id, String password) {
Path filePath = Paths.get(getClass().getClassLoader().getResource(FILE_NAME).getFile());
try {
return Files.lines(filePath)
.map(line -> line.split(","))
.filter(parts -> parts[4].equals(id) && parts[2].equals(password))
.findFirst()
.map(this::parseAdmin)
.orElseGet(Admin::new);
} catch (IOException e) {
System.err.println("Failed to read csv " + e.getMessage());
}
return new Admin();
}
private Admin parseAdmin(String parts[]) {
Admin admin = new Admin();
admin.setName(parts[4]);
admin.setLogin(parts[0]);
return admin;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть метод, который в зависимости от локали пользователя выводит сообщениеПроблема в том, что не отображаются русские символы
Как работает оператор проверки на равенство ("=="), имеются ли ему альтернативы и в каких ситуациях следует его применять?
В общем, создал бота для телеграмаИспользую один, естественно, статический объект Connection для доступа к БД