如何比较文件的内容 (header) 与 java 中定义的变量并在数据库中更新?
How to compare the content (header) of a file with the defined variables in java and update in database?
我想让系统读取csv文件,以便分析csv文件的headers和行。 csv 文件的 headers 应该与 ProductDetail.java 的变量匹配。如果 headers 与这些变量匹配,则将读取的行插入到那些 headers 下的数据库中。
ProductDetail.java
public class ProductDetail {
String street;
String city;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
ReadFile.java
public class ReadFile {
public static void main(String[] args) {
FileReader input = null;
BufferedReader br = null;
try {
input = new FileReader("uploadedFile.csv");
br = new BufferedReader(input);
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
input.close();
br.close();
}
catch (IOException x) {
x.printStackTrace();
}
}
}
}
我已经开始了这个项目,但现在我完全不知道如何读取列和行以及如何与 ProductDetail.java 中设置的预定义 headers 相匹配。如果你能帮助我,那就太好了。
Read CSV link this。 CSV 是逗号分隔文件,如果您读取 CSV,并使用逗号作为分隔符并将 CSV 的第一行(如果将来列顺序更改,则使用字符串比较)映射到数据库列名,您就完成了。
使用 SuperCSV,您可以这样做来验证 csv 的 header 是否与预期的 header 匹配。
通常,预期的 header 是固定的。所以,你应该把它们写成常量。
public static void main(String[] args) throws IOException {
CsvBeanReader csvBeanReader = null;
try {
// your csv file
String csvFile = null;
csvBeanReader = new CsvBeanReader(csvFile), CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE);
final String[] headersArray = csvBeanReader.getHeader(true);
List<String> headers = Arrays.asList(headersArray);
List<String> expectedHeaders = Arrays.asList("street", "city");
if (!expectedHeaders.equals(headers)) {
return;
}
final CellProcessor[] processors = new CellProcessor[] { new NotNull(), new NotNull() };
List<ProductDetail> productDetails = new ArrayList<>();
ProductDetail productDetail = null;
while ((productDetail = csvBeanReader.read(ProductDetail.class, headersArray, processors)) != null) {
productDetails.add(productDetail);
}
// save products in your DB
}
finally {
try {
csvBeanReader.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
我想让系统读取csv文件,以便分析csv文件的headers和行。 csv 文件的 headers 应该与 ProductDetail.java 的变量匹配。如果 headers 与这些变量匹配,则将读取的行插入到那些 headers 下的数据库中。
ProductDetail.java
public class ProductDetail {
String street;
String city;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
ReadFile.java
public class ReadFile {
public static void main(String[] args) {
FileReader input = null;
BufferedReader br = null;
try {
input = new FileReader("uploadedFile.csv");
br = new BufferedReader(input);
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
input.close();
br.close();
}
catch (IOException x) {
x.printStackTrace();
}
}
}
}
我已经开始了这个项目,但现在我完全不知道如何读取列和行以及如何与 ProductDetail.java 中设置的预定义 headers 相匹配。如果你能帮助我,那就太好了。
Read CSV link this。 CSV 是逗号分隔文件,如果您读取 CSV,并使用逗号作为分隔符并将 CSV 的第一行(如果将来列顺序更改,则使用字符串比较)映射到数据库列名,您就完成了。
使用 SuperCSV,您可以这样做来验证 csv 的 header 是否与预期的 header 匹配。 通常,预期的 header 是固定的。所以,你应该把它们写成常量。
public static void main(String[] args) throws IOException {
CsvBeanReader csvBeanReader = null;
try {
// your csv file
String csvFile = null;
csvBeanReader = new CsvBeanReader(csvFile), CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE);
final String[] headersArray = csvBeanReader.getHeader(true);
List<String> headers = Arrays.asList(headersArray);
List<String> expectedHeaders = Arrays.asList("street", "city");
if (!expectedHeaders.equals(headers)) {
return;
}
final CellProcessor[] processors = new CellProcessor[] { new NotNull(), new NotNull() };
List<ProductDetail> productDetails = new ArrayList<>();
ProductDetail productDetail = null;
while ((productDetail = csvBeanReader.read(ProductDetail.class, headersArray, processors)) != null) {
productDetails.add(productDetail);
}
// save products in your DB
}
finally {
try {
csvBeanReader.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}