這個專案的目的是為一個電視節目創建和組織資料。
在這個專案中,用戶可以直接匯入和輸入資料。這些資料已經部署在生產中并處于活動狀態。
你必須防止一個已經存在的角色再次被創建(即:名字已經被占用)。它必須防止通過匯入器和表單創建字符。
如果角色是通過表單創建的,它必須按照已經存在的相同格式顯示一個錯誤資訊。
根據我的理解,代碼應該是:
使用輸入的資料并通過第1列(字符名稱)進行掃描,并通過一個while回圈(也許)查看它是否已經存在。
如果它確實存在,代碼應該輸出。
如果輸入的資料不存在,那么它將把它添加到現有資料中。
到目前為止,我已經撰寫了以下代碼來讀取csv檔案,它可以正常作業:
編輯:謝謝您的支持。
編輯:感謝Sir Pleft,我通過以下代碼實作了作業:
package com.openCSV.mavenproject;
import com.opencsv.bean.CsvToBeanBuilder。
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;
import com.opencsv.exception.CsvDataTypeMismatchException;
import com.opencsv.exception.CsvRequiredFieldEmptyException;
import java.io.FileReader。
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer。
import java.util.List;
public class Main {
public static void main title function_">main(String[] args) throws IllegalStateException, IOException, CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
// TODO 自動生成的方法存根。
String inputName = "John"; //這是你的輸入。
String file = "/Users/apple/eclipse-workspace/Test/data/characters.csv" 。
//將CSV轉換為bean。
List<Character> characters = new CsvToBeanBuilder(new FileReader(file)
.withType(Character.class)
.withSkipLines(1)
.build()
.parse();
characters.forEach(System.out::println);
boolean anyMatch = characters.stream().anyMatch(character -> character.getName().eals(inputName))。
if (anyMatch) {
System.out.println("錯誤此字符存在")。
} else {
Character character = new Character() 。
character.setName(inputName);
characters.add(character)。
Writer writer = new FileWriter(file)。
StatefulBeanToCsv beanToCsv = operator">= new StatefulBeanToCsvBuilder(writer)。 build()。
beanToCsv.write(characters);
writer.close()。
}
}
}
現在我的問題是,當我運行上述代碼時,我得到的錯誤資訊如下:
執行緒"main"中出現例外 java.lang.RuntimeException: 錯誤決議CSV行。1036, values:
at com.opencsv.bean.CsvToBean.parse(CsvToBean.java:376)
at com.openCSV.mavenproject.Main.main(Main.java:31)
原因是:com.opencsv.exceptions.CsvMalformedLineException。在CSV行的末尾有未結束的引號欄位。丟失文本的開始。[
]
at com.opencsv.CSVReader.readNext(CSVReader.java:355)
at com.opencsv.bean.CsvToBean.submitAllBeans(CsvToBean.java:296)
at com.opencsv.bean.CsvToBean.parse(CsvToBean.java:357)
... 1 more
它指定的是第1036行,然而我的CSV檔案只到第1035行
因此,我認為該程式正在作業,并達到了我的CSV檔案的末尾,然后不知道該怎么做。我將如何編輯我的代碼,使它在csv檔案結束后中斷?
uj5u.com熱心網友回復:
如果你的專案是maven,那么你可以添加OpenCSV庫來幫助你
在你的pom.xml中添加以下依賴關系:
<dependency>
<groupId>/span>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>/span>5.3</version>/span>
</dependency>/span>
然后創建Character類,它將容納你的CSV的一行。為了方便起見,我只添加了name和description欄位,你也可以添加其他欄位,或者你可以只留下name欄位。
public class Character {
@CsvBindByPosition(position = 0)
private String name;
@CsvBindByPosition(position = 1)
private String描述。
public String getName() {
return name;
}
public void setName(String name)。{
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(>String description) {
this.description = description;
}
這里是一些執行你所要求的代碼。讀取csv檔案,如果發現一個與給定輸入相匹配的名稱,則列印出一個錯誤,否則將其添加到csv檔案中。
String inputName = "John" /span>。//這是你的輸入。
List<Character> characters = new CsvToBeanBuilder(new FileReader("D: 角色。 csv"))。)
.withType(Character.class)
.withSkipLines(1)
.build()
.parse();
characters.forEach(System.out::println);
boolean anyMatch = characters.stream().anyMatch(character -> character.getName().eals(inputName))。
if (anyMatch) {
System.out.println("錯誤此字符存在")。
} else {
Character character = new Character() 。
character.setName(inputName);
characters.add(character)。
Writer writer = new FileWriter("D: 角色。 csv")。)
StatefulBeanToCsv beanToCsv = operator">= new StatefulBeanToCsvBuilder(writer)。 build()。
beanToCsv.write(characters);
writer.close()。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/310146.html
標籤:
