当前位置: 首页 > 知识库问答 >
问题:

Java:导入包含空字段的csv会给出NullPointerExcure

江凯风
2023-03-14

我一直在尝试将csv文件(包含空字段)导入数据库,方法是使用文件选择器选择该文件。使用filechooser很重要,因为它是学校使用的一个程序,他们希望能够通过导入自己拥有的excel/csv文件,每年导入新的学生记录。每当我运行下面给出的代码时,都会出现以下错误:

SEVERE: null
java.lang.NullPointerException
at gui.FXMLStudentController$1.run(FXMLStudentController.java:86)
at java.lang.Thread.run(Thread.java:745)

我想问题是显而易见的。我如何使它在没有错误的情况下工作?

进口商类:

public class ImportStudents
{
private File file;
private List<Student> students = new ArrayList<>();

public ImportStudents(File file) throws IOException 
{
    this.file = file;
}

public List importStudents() throws FileNotFoundException, IOException
{
   try(CSVReader reader = new CSVReader(new FileReader(file), ';'))
   {
   String[] nextLine;
   boolean notFirst = false;
   while ((nextLine = reader.readNext()) != null) {
        if (notFirst) {

             students.add(new Student(nextLine[3], nextLine[1], nextLine[0],nextLine[2]));
        }
        notFirst = true;
    }

   }catch(Exception e)
           {
               e.printStackTrace();
           }
    return students;
}
}

按下导入按钮时的GUI代码:

   @FXML
private void importeer(ActionEvent event)
{

    Stage stage = new Stage();
    ImportStudents = importStudents; //importStudents created earlier in the class
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Open File");
    try
    {
        importStudents = new ImportStudents(fileChooser.showOpenDialog(stage));
        new Thread(new Runnable() {

            @Override
            public void run() 
            {
                try
                {
                    repository.importStudents(importStudents.importeerLeerlingen());
                }
                catch(Exception e)
                {
                    Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, e);
                }
            }
        }).start();

    }
    catch(Exception e)
    {

    }
}

存储库中的代码:

  public void importStudents(List<Student> students)
{
    try{
        em.getTransaction().begin();
        for (Student : students) 
        {
           em.persist(student);
        }
        em.getTransaction().commit();
    }
    finally
    {
        em.close();
    }
}

我尝试以这种方式导入csv文件中的示例:正如您所看到的,电子邮件大多数时候都是空的(这是针对幼儿园的),但对于某些情况,它是给定的。

 SurName;Name;E-mail;Class
 Agacseven;Tuana;;3KA
 Ahmedov;Arman;;2KC
 Akcan;Efe;;3KA
 Akcan;Hanzade;;2KC
 Akhtar;Hussain;;1KA

学生构造函数看起来像这样

public Student(String class, String name, String surNaam, String email) 
{

    this.class = class;
    this.name = name;
    this.surNaam = surNaam;
    this.email = email;
}

共有1个答案

司寇照
2023-03-14

学生构造函数看起来怎么样?如果分隔符之间没有任何内容,我很难在javadocs中找到值为readNext()的字符串引用。它可以是空字符串,也可以是空字符串(看起来是空的)。在这种情况下,可能是在学生构造函数中使用该值所做的操作对于null值是不合法的。

编辑

如果是这种情况,您可以在构造函数中处理null值的传递,也可以编写一个类似以下内容的静态方法:

public static String Convert(String str) {
    return str == null ? "" : str;
}

在实例化学生时,请执行以下操作:

new Student(Convert(nextLine[3]), ... );
 类似资料:
  • 我目前有一个字符串生成器,用于导出到csv文件。CSV文件中导出的值在somw值中包含逗号。 有时,数据包含一个“,”导致其生成错误。 这会生成导出,但如何在一列中显示带有逗号的数据

  • 问题内容: 我正在制作基于文本的骰子滚轴。它接受“ 2d10 + 5”之类的字符串,并作为滚动结果返回一个字符串。我的问题出现在令牌生成器中,该令牌生成器将字符串拆分为有用的部分,以便我解析为信息。 这会产生奇怪的意外结果。我不知道是什么原因造成的。可能是正则表达式,我的误解,或者Java只是Java。这是正在发生的事情: 产生字符串数组。这是对的。 产生字符串数组。这是对的。 产生字符串数组。这

  • 如何获取数组中仅包含1个给定匹配的文档索引? 例如,如果我的数组是 现在如何获得的第一个文档的索引? 我试过了 但这似乎不起作用,它给了我。

  • 问题内容: 我正在使用将CSV导入MySQL表。表格的字段之一存储着我在表格结构中定义的邮政编码数据。 在CSV中,此字段有时为空。当我执行查询时,MySQL将发出如下警告: 我尝试将字段重新定义为,这会创建相同的警告,而MySQL不允许。有什么建议吗? 问题答案: 空值被解释为空字符串(’‘),而不是NULL,因此未使用默认值。 如果要显式控制这些空字符串的处理,最好的办法是将它们加载到用户变量

  • 我试图解析JSON结果从Wordpress插件API使用RetroFit2和GSON。我使用著名的网站生成了我的POJO,并将其修改为以下模型: 插件ApiResponse.java 插件。JAVA 截图。JAVA _1.java(_2.java_3.java相同) 如果屏幕截图字段不包含任何条目,则会出现问题。我已经设置了HttpLoggingInterceptor,它完整地记录响应代码200和

  • 我有一个第三方包。我不能以任何方式修改。包包含以下类: 如果我从的包调用此方法,它将失败,因为不在包的类路径上。 我可以简单地添加一个片段来修改bundle的类路径吗?还是这种依赖关系只适用于片段内的类? 长话短说:当在主机包的类中执行时,OSGi中的的语义是什么?是否包括: 问:捆绑类?A:是的。 问:片段中包含的类?A:是的。来源 问:导入的包和从所需包导出的包?A:是的。 问:导入的包裹和导