我有3个csv文件,如下所示:
我需要显示:
我现在正在使用BufferedReader
:
String csvFileToRead = "csvFiles/authors.csv";
BufferedReader br = null;
String line = "";
String splitBy = ";";
try {
br = new BufferedReader(new FileReader(csvFileToRead));
while ((line = br.readLine()) != null) {
String[] book = line.split(splitBy);
System.out.println("BOOKS [Email Address= " + book[0] + " , firstname="
+ book[1] + " , lastname=" + book[2] + "]");
}
}
我对如何处理多个文件感到困惑。以下是我考虑过的方法:
更改
String csvFileToRead
到String数组
String[] csvFileToRead = {"data/authors.csv", "data/books.csv", "data/magazines.csv"};
然后每次将每个索引传递给返回所有行的方法,但是要使用DS卡住。我认为ArrayList
是不够的,因为我需要分开的数据。
我应该为作者,书籍和杂志制作3个不同的课程吗?
这样做的理想方法是什么?请建议。
答案 0 :(得分:1)
我会创建3个List<String[]>
,每个public List<string[]> csvToList(String csvFileToRead){
BufferedReader br = null;
String line = "";
String splitBy = ";";
try {
br = new BufferedReader(new FileReader(csvFileToRead));
List<string[]> list_csv = new ArrayList<string[]>();
while ((line = br.readLine()) != null) {
String[] book = line.split(splitBy);
authors.add(book);
}
catch(Exception ex) {}
return list_csv;
}
包含一个CSV文件中的矩阵,方法如下:
List<String[]> authors = csvToList("csvFiles/authors.csv");
List<String[]> books = csvToList("csvFiles/books.csv");
List<String[]> magazine = csvToList("csvFiles/magazine.csv");
之后你可以用它作为:
public void printISBN(string ISBN){
for(String[] s_tab in books)
if(s_tab[1].equals(ISBN))
System.out.println(s_tab[0]);
for(String[] s_tab in magazine)
if(s_tab[1].equals(ISBN))
System.out.println(s_tab[0]);
}
您现在可以打印所需的所有内容,例如第一种情况:基于ISBN显示所有书籍和杂志:
List<Authors> List<Books> List<Magazine>
希望我帮助过。
修改强>
您还可以为每个文件创建3个类,并对类别列表执行相同的操作:{{1}}但如果您只需回答这3个问题则没有必要。
答案 1 :(得分:1)
一个简单的解决方案是创建与您的实体相对应的三个类:
public class Author {
private String email;
private String firstName;
private String lastName;
// ...
}
public class Book {
private String title;
private String isbn;
private String authorEmail;
private String description;
// ...
}
public class Magazine {
private String title;
private String isbn;
private String authorEmail;
private Date releaseDate;
// ...
}
在您的主要代码中,当您阅读CSV文件时,您可以填写HashMap
将ISBN映射到书籍,以及类似的杂志,您可以使用它来检索ISBN中的书籍或杂志:
Map<String, Book> isbnBookMap = new HashMap<String, Book>();
Book book = isbnBookMap.get(isbn);
Map<String, Magazime> isbnMagazineMap = new HashMap<String, Magazime>();
Magazime magazine = isbnMagazineMap.get(isbn);
同样以书名形式获得书籍或杂志。
至于通过作者获取书籍,您需要将作者邮件地址映射到List
书籍,因为作者可以拥有多本书:
Map<String, List<Book>> authorBookMap = new HashMap<String, List<Book>>();
List<Book> books = authorBookMap.get(authorAddress);
答案 2 :(得分:0)
您可以使用Java CSV API 比如OpenCSV