我是Java的新手,我遇到了一个我无能为力的情况。我需要从文件夹中取出所有csv文件,逐个读取它们,例如验证它们。有姓名,年龄,电子邮件等数据。所以名称应该只有字母,年龄应该是数字,电子邮件应该是有效的电子邮件格式。在任何一行中都有无效数据的文件,不应该对该特定csv文件进行任何进一步处理,它应该被移动到另一个文件夹,该文件夹将有错误的csv文件,程序将移动到文件夹中的下一个csv直到所有这些都被检查,验证和移动。 我不知道如何开始这个。请帮帮我们。
答案 0 :(得分:2)
好的,让我们将这个问题分成以下四个较小的主题:
步骤1:Java程序读取文件夹,结果是文件列表
假设你在java程序的顶部有下面
import java.io.*;
import java.util.*;
下面的代码应该获取文件夹中的文件列表
File f = new File(folder);
File[] fileList = f.listFiles();
第2步:Java程序读取文件,结果是行列表
String line;
BufferedReader br = new BufferedReader(new FileReader(path));
while ((line = br.readLine()) != null) {
String l = line.trim(); // Remove end of line. You can print line here.
}
br.close();
步骤3:解析一行的Java程序,获取一列列
String[] columns = l.split(","); // separate line by comma
for( int i=0; i<columns.length; i++ )
{
System.out.println(columns[i].trim());// remove space after comma
}
第4步:验证,例如年龄 年龄必须是整数,因此将其解析为整数
int age = Integer.parseInt(columns[3].trim());//assuming age at column #3
看到另一个答案出来。该答案没有文件夹到文件循环。 希望这可以帮助。
答案 1 :(得分:1)
首先,将文件保存为.csv
format1。这适用于Excel工作表。然后通过此代码在main()
中调用此函数,您将逐行读取.csv
文件,每个单元格一次。
试试这个:
public List<HashMap<String, Object>> convertCSVRecordToList() {
String csvFile = "your_file_name.csv";
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
HashMap<String, Object> Map = new HashMap<String, Object>();
List<HashMap<String, Object>> MapList = new ArrayList<HashMap<String, Object>>();
try {
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
System.out.println(line);
String[] data = line.split(cvsSplitBy);
Map.put("filed_name", data[3]);
Map.put("field_name", data[0]);
Map.put("field_name", data[2]);
Map.put("fiels_name", data[1]);
MapList.add(Map);
Map = new HashMap<String, Object>();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return MapList;
}