Я работаю над проектом, в котором у меня есть класс Macchine (автомобили), и я хочу, чтобы пользователь вставил новый автомобиль, а затем сохранил его в CSV-файле.
public static void inserimento(){
List<Macchina> macchine = new ArrayList<>();
String continua;
do {
System.out.println("Inserisci i dettagli della macchina:");
System.out.print("Produttore: ");
String produttoreinput = console.readLine();
System.out.print("Modello: ");
String modelloinput = console.readLine();
System.out.print("Accelerazione (0-100 km/h in secondi): ");
String accinputstr = console.readLine();
double accinput = Double.parseDouble(accinputstr);
System.out.print("Velocità Massima (km/h): ");
String vmaxinputstr = console.readLine();
double vmaxinput = Double.parseDouble(vmaxinputstr);
System.out.print("Numero di porte: ");
String numporteinputstr = console.readLine();
int numporteinput = Integer.parseInt(numporteinputstr);
macchine.add(new Macchina(produttoreinput, modelloinput, accinput, vmaxinput, numporteinput));
System.out.print("Vuoi inserire un altro veicolo? (s/n): ");
continua = console.readLine();
} while (continua.equalsIgnoreCase("s"));
// Salva i dati nel file
try (BufferedWriter writer = new BufferedWriter(new FileWriter("macchine.txt"))) {
for (Macchina macchina : macchine) {
writer.write(macchina.toString());
writer.newLine();
}
System.out.println("I dati sono stati salvati nel file .");
} catch (IOException e) {
System.out.println("Errore durante il salvataggio dei dati: " + e.getMessage());
}
}
Это функция, которая обрабатывает ввод и сохранение.
public String toString(){
return "Produttore: " + super.getproduttore() + " Modello: " + this.getnome() + " Numero di porte: " + Integer.toString(this.getnumporte()) + " Accelerazione (0-100 km/h): " + Double.toString(super.getvmax()) +"s" + " Velocità massima: " + Double.toString(super.getacc()) +"km/h";
}
И это функция в классе Macchina. Проблема в том, что когда я вставляю машину, она сохраняется, как на изображении, и мне хотелось бы иметь по одному столбцу для каждой информации. Как я могу это сделать?
🤔 А знаете ли вы, что...
Java имеет систему управления зависимостями, известную как Maven.
Измените функцию toString следующим образом:
public String toString(){
return super.getproduttore() + ";" + this.getnome() + ";" + Integer.toString(this.getnumporte()) + ";" + Double.toString(super.getvmax()) +";" + Double.toString(super.getacc()) ;
}
и укажите строку заголовка следующим образом:
String header = "Produttore;Modello;Numero di porte;Accelerazione(0-100 km/h);Velocità massima (km/h)";
запишите эту строку в файл .csv (замените .txt на .csv) перед циклом
writer.write(header);
for (Macchina macchina : macch...
toString
Метод toString
предназначен для сброса данных во время отладки.
Не переопределяйте этот метод для CSV.
Добавьте методы для генерации и анализа текста CSV.
record Vehicle ( String make , String Model , double acceleration , … )
{
String toCsv()
{
return this.make + "," + … + "\n" ;
}
static Vehicle fromCsv ( String line ) { … return new Vehicle ( … ); }
}
CSV не так прост, как кажется.
Прежде всего, что, если ваш контент содержит разделитель ? Тогда вам нужно бежать.
Во-вторых, необходимо соблюдать стандартную спецификацию RFC 4180.
Поэтому идеальное решение — использовать библиотеку обработки CSV, а не делать это самостоятельно. К счастью, у вас есть выбор из нескольких хороших библиотек в экосистеме Java. Например, Apache Commons CSV и OpenCSV.
Чтобы узнать больше, выполните поиск по переполнению стека. Эта тема уже неоднократно поднималась.