繁体   English   中英

如何使用 arraylist 在文件中写入对象

[英]How to write objects in a file using arraylist

我想使用 arraylist 在文件中写入对象,我应该添加什么来显示我的文件?

package my.issues.issue15;


import java.io.*;
import java.util.ArrayList;

public class WriteObjects {
    public static void main(String[] args) throws IOException {
        Result r1 = new Result("101","science","3","A");
        Result r2 = new Result("102"," Nationhood Studies","3","B+");
        Result r3 = new Result("103","Math","3","A-");

        ArrayList<Result> resultList = new ArrayList<>();
        resultList.add(r1);
        resultList.add(r2);
        resultList.add(r3);
        System.out.println(resultList);

        FileOutputStream fos = new FileOutputStream("Course.ser");
        ObjectOutputStream oos =new ObjectOutputStream(fos);
        oos.writeObject(resultList);

        System.out.println("Finish");

        oos.close();
        fos.close();
    }


}

如果我使用缓冲区写入器,它会显示错误。 我应该添加什么以便我的文件能够显示?

        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter(new File("Results.txt"), true));
            writer.write(resultList);
            writer.newLine();
            writer.close();

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

错误

Error:(21, 19) java: no suitable method found for write(java.util.ArrayList<my.issues.issue15.Result>)
    method java.io.Writer.write(char[]) is not applicable
      (argument mismatch; java.util.ArrayList<my.issues.issue15.Result> cannot be converted to char[])
    method java.io.Writer.write(java.lang.String) is not applicable
      (argument mismatch; java.util.ArrayList<my.issues.issue15.Result> cannot be converted to java.lang.String)
    method java.io.BufferedWriter.write(int) is not applicable
      (argument mismatch; java.util.ArrayList<my.issues.issue15.Result> cannot be converted to int)

以下是我的结果 class 的详细信息。 我想弄清楚我应该添加什么以便创建文件


import java.io.Serializable;

public class Result implements Serializable {
    private String courseCode;
    private String courseName;
    private String creditHours;
    private String grade;

    public Result(String courseCode, String courseName, String creditHours, String grade) {
        this.courseCode = courseCode;
        this.courseName = courseName;
        this.creditHours = creditHours;
        this.grade = grade;
    }


    public String toString(){
        return "< " + courseCode + " | " + courseName + " | " + "Credit Hours: " + creditHours + " | " + "Grade: " +grade + " >";
    }
}

您正在尝试调用write(...) ,它需要一个 char 数组、一个 String 或一个 Integer 作为参数(错误消息从字面上告诉您“ ArrayList<...> cannot be converted to char[]/String/int )。

由于我不知道您的Result class 看起来如何,我无法为您编写代码,但基本上您需要从每个 Result object 中获取值并将它们一个一个写入文件或使用StringBuilder构建您要编写的完整字符串。

它可能看起来像这样:

StringBuilder sb = new StringBuilder();

for(Result result : resultList)
{
    String[] resultData = result.getValues(); // getValues() is whatever getters you use in result class
    
    for(String substring : resultData)
    {
        sb.append(substring)
    }
}

然后您可以在 StringBuilder 实例上调用toString()并将其写入您的文件。

没关系,它比这更简单,您只需在 ArrayList 上调用toString()

完整的 class:

import java.io.*;
import java.util.ArrayList;

public class WriteObjects
{
    public static void main(String[] args)
    {
        Result r1 = new Result("101", "science", "3", "A");
        Result r2 = new Result("102", " Nationhood Studies", "3", "B+");
        Result r3 = new Result("103", "Math", "3", "A-");
        
        ArrayList<Result> resultList = new ArrayList<>();
        resultList.add(r1);
        resultList.add(r2);
        resultList.add(r3);
        System.out.println(resultList);
        
        try
        {
            File file = new File("Results.txt");
            BufferedWriter writer = new BufferedWriter(new FileWriter(file, true));
            writer.write(resultList.toString());
            writer.newLine();
            writer.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM