我正在开发一个项目,其中有一个名为 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 类中的函数。 问题是,当我插入一辆车时,它会像图像中那样保存,我希望每条信息都有一列。我该怎么办?
添加生成 CSV 文本的方法。
record Vehicle ( String make , String Model , double acceleration )
{
String toCsv()
{
return this.make + "," + … + "\n" ;
}
Vehicle fromCsv ( String line ) { … }
}
CSV 并不像看起来那么简单。
首先,如果您的内容包含分隔符怎么办?那你需要逃跑。
其次,有一个需要尊重的规范。
因此,理想的解决方案是利用 CSV 处理库,而不是自行处理。幸运的是,Java 生态系统中有几个不错的库可供选择。
像这样修改你的 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)";
在 for 循环之前将此行写入 .csv(将 .txt 更改为 .csv)文件
writer.write(header);
for (Macchina macchina : macch...