Java 通用CSV读取和加载代码

Java 通用CSV读取和加载代码,java,csv,Java,Csv,我想用java实现以下功能: 一个类,具有根据提供的参数数量读取不同列数的csv文件的方法。例如: public boolean readAndLoad(String csvPath,String csvFileName, String csvType); 这里csvPath和csvFileName是不言自明的,但是csvType在这里是用来获取对应于csv的表名的。例如:如果csvType是employee,则表示此csv包含带有员工数据特定标题的员工数据 现在,我想创建一个通用方法或类的组

我想用java实现以下功能:

一个类,具有根据提供的参数数量读取不同列数的csv文件的方法。例如:

public boolean readAndLoad(String csvPath,String csvFileName, String csvType);
这里csvPath和csvFileName是不言自明的,但是csvType在这里是用来获取对应于csv的表名的。例如:如果csvType是employee,则表示此csv包含带有员工数据特定标题的员工数据

现在,我想创建一个通用方法或类的组合,可以执行此操作并将不同的csv加载到不同的表中。每个csv中的列数将不同


一种可能的解决方案是在方法中手动检查文件名,然后获取对应于该csv的静态头列表,并在表中插入数据。将有许多如果其他检查。还有其他解决办法吗

如果csvType应该与您的一个实体的名称匹配,我建议首先从其包中标识该实体:

String packageName="com.your.entities";
           ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            URL packageURL;
            ArrayList<String> classesNames = new ArrayList<String>();;
            packageName = packageName.replace(".", "/");
            packageURL = classLoader.getResource(packageName); 
            URI uri = new URI(packageURL.toString());
            File folder = new File(uri.getPath());
                File[] file = folder.listFiles();
                String className;
                for(File actual: file){
                    className = actual.getName();
                    className = className.substring(0, className.lastIndexOf('.'));
                    classesNames.add(className);}
String packageName=“com.your.entities”;
ClassLoader ClassLoader=Thread.currentThread().getContextClassLoader();
URL-packageURL;
ArrayList classesNames=新的ArrayList();;
packageName=packageName.replace(“.”,“/”);
packageURL=classLoader.getResource(packageName);
URI=新的URI(packageURL.toString());
File folder=新文件(uri.getPath());
File[]File=folder.listFiles();
字符串类名称;
用于(实际文件:文件){
className=actual.getName();
className=className.substring(0,className.lastIndexOf('.');
classesNames.add(className);}
获取实体后,快速查看csvType是否与其中一个匹配,如果匹配,则应获取标题的字段数,当然还有字段名称:

 packageName = packageName.replace("/", ".");
                   int headerLengh;
                   String header="";
                   for (String name :classesNames)
                   {
                       if(name.equals(csvType))
                       { headerLengh=Class.forName(packageName+"."+name).getDeclaredFields().length;

                       for (int i=0;i<headerLengh;i++)
                       {
                           header=header+Class.forName(packageName+"."+name).getDeclaredFields()[i].getName()+" ";

                       }}}
packageName=packageName.replace(“/”,”);
国际校长英语;
字符串标题=”;
for(字符串名称:classesNames)
{
if(name.equals(csvType))
{headerLengh=Class.forName(packageName+““+name).getDeclaredFields().length;
对于(int i=0;i,只需使用即可完成任务。它包含大量功能,速度非常快。如果需要将数据映射到特定类的对象,可以在属性上声明类,并在属性上添加注释,以指示字段名称/位置。如果需要,还可以很好地支持类的层次结构


如果您只需要为每个可能的输入提供标题,您会发现一个
setHeaders
方法,允许您为输入分配任何标题列表。您还可以调用
selectFields
方法来选择要读取的字段和要忽略的字段。

您有任何示例csv文件结构吗?一个切换案例可能会有所帮助吗eader名称应在CSV文件中。。。