将java对象写入csv文件

时间:2018-01-26 00:58:47

标签: java json csv

我想将Json文件转换为CSV文件。我将数据从json传递给java对象,然后我尝试将Java对象写入CSV文件,但它给出了NPE。它可能无法从JSON正确获取数据。我不确定它是什么。

读取json到java对象的类

public Student convertJson(File jsonFile)  {
    Gson gson = new Gson();
    Student std;

    try{
        std = gson.fromJson(new FileReader(jsonFile),Student.class);
        return std;

    }
    catch (FileNotFoundException e) {
        return null;
    }
}

将对象转换为csv的类

private final String SEPARATOR = ", ";
public void toCSV(List<Student> student) {

try{
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("group.csv"),"UTF-8"));

    for(Student std: student){

        StringBuffer oneLine = new StringBuffer();
        oneLine.append(std.getEmail());
        oneLine.append(SEPARATOR);
        oneLine.append(std.getName());
        oneLine.append(SEPARATOR);
        oneLine.append(std.getScoreGroup());
        oneLine.append(SEPARATOR);
        oneLine.append(std.getCommentGroup());

        bw.write(oneLine.toString());
        bw.newLine();

    }
    bw.flush();
    bw.close();

} catch (IOException e) {
    e.printStackTrace();
}

主要

 File newfile = new File(pathName);
    List<File> files= file.findFile(newfile);  // step 1 find files and return arralist of files
    System.out.println(files);




    List<Student> students = new ArrayList<>(); // array list of objects Student
    ReadJson fiel = new ReadJson();             // parses passed json file and returns Student file

    List<Group> info = new ArrayList<>();
    java.util.Collections.sort(info);

    for(int i=0;i<files.size();i++){
        Student temp = fiel.convertJson(new File(files.get(i).getName()));
        students.add(temp);
    }


    ConvertJSONFiles json = new ConvertJSONFiles();
    json.toCSV(students);

错误

Exception in thread "main" java.lang.NullPointerException
at ca.cmpt213.as2.ConvertJSONFiles.toCSV(ConvertJSONFiles.java:16)
at com.company.Main.main(Main.java:44)

与目标虚拟机断开连接,地址:&#39; 127.0.0.1:63683&#39;,传输:&#39; socket&#39;

新问题:现在它说它无法读取,因为应该有对象而不是数组。

  

线程中的异常&#34; main&#34; com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但在第2行第13行路径为$ .group时为BEGIN_ARRAY       在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:224)       在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.read(ReflectiveTypeAdapterFactory.java:129)       在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.read(ReflectiveTypeAdapterFactory.java:220)       在com.google.gson.Gson.fromJson(Gson.java:888)       在com.google.gson.Gson.fromJson(Gson.java:826)       at ca.cmpt213.as2.ReadJson.convertJson(ReadJson.java:17)       在com.company.Main.main(Main.java:36)

1 个答案:

答案 0 :(得分:-1)

最终的原因在于:

new File(files.get(i).getName())

File.getName()返回文件路径的最后一部分,因此新创建的文件基本上会丢失所有路径信息。

结果路径很可能不存在,使convertJson(File)返回null,传递到List<Student> students并从那里传递到toCSV(List),最后NPE发生。

可能的解决方法:

Student temp = fiel.convertJson(files.get(i));