我尝试在vehicle.csv中输入一辆汽车的soldPrice。这是我为VehicleData类创建的一个方法。
csv文件具有五列,即carPlate、carModel、acquiredPrice、carStatus(1表示未售出,0表示已售出)和soldPrice。
public static void updateVehicleData() {
Scanner input = new Scanner(System.in);
System.out.print("Please enter car number plate: ");
String carPlate = input.nextLine();
try {
RandomAccessFile raf = new RandomAccessFile("vehicle.csv", "rw");
while (raf.getFilePointer() < raf.length()) {
long currentPosition = raf.getFilePointer();
String line = raf.readLine();
String[] vehicleData = line.split(",");
// If the carPlate matches, update this row
if (carPlate.equals(vehicleData[0])) {
final int CARSTATUS = 0;
System.out.print("Please enter car sold price: ");
String soldPrice = input.nextLine();
// Create a new line with updated data
String updatedLine = carPlate + ","
+ vehicleData[1] + "," // Assuming you want to keep the car model
+ vehicleData[2] + "," // Assuming you want to keep the acquired price
+ CARSTATUS + ","
+ soldPrice;
// Move the pointer to the beginning of the line
raf.seek(currentPosition);
// Write the updated line, padding with spaces if needed
raf.writeBytes(String.format("%-" + line.length() + "s", updatedLine));
// Move the pointer to the end of the line
raf.seek(currentPosition + line.length());
raf.close();
break;
}
}
System.out.println("Successfully updated the vehicle data in vehicle.csv file.");
} catch (IOException e) {
System.out.println("An error occurred while updating vehicle data in vehicle.csv file.");
e.printStackTrace();
}
}
字符串
当我为其中一辆汽车输入soldPrice时,它在csv文件中变得有点混乱。我修改的vehicle soldPrice下的行上升了,我改变了soldPrice旁边的行。混乱行的carPlate也变成了soldPrice,并受到我输入的金额的影响。
如果我输入10作为售价,而不是
...
PQR789,Chevrolet,121200,0,10
RST901,Mitsubishi,136700,0,153000
...
型
它成为
...
PQR789,Chevrolet,121200,0,10ST901,Mitsubishi,136700,0,153000
...
型
我在soldPrice中添加的0越多,三菱的carPlate被删除的越多。我可以做些什么来确保csv文件正常工作。
1条答案
按热度按时间isr3a4wc1#
要解决此问题,应在CSV文件中写入行后添加行分隔符。
字符串
应在此行程式码之后使用。
型
因此,代码如下:
型
**更新:**在提供的代码中,当替换字符串的长度与文件中的原始字符串的长度不同时,存在问题。当使用writeBytes()函数写入“updatedLine”时,随着“sold price”中的位数增加,它会覆盖下一行的长度,即“original line”与“updatedLine”的长度之差。要正确更新文件,可以根据需要检查以下代码。
型