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

Java API流文件到ArrayList[重复]

姬慎之
2023-03-14

直奔主题。我相信这是很容易解决的,但不知何故我被卡住了。我有一个从主类调用的类上传器。这个类流式传输一个带有学生列表的txt文件并将其打印出来。但是,我找不到一个解决方案,如何将这个txt文件存储在ArrayList中,并在其他类中使用。文件是基于学生类排序的,它覆盖toString方法以获得打印输出。我尝试使用collect(collectors.toList())方法,但没有奏效。我想我错过了一些明显的东西。有谁能提点什么吗?多谢了。

下面是我为学生类编写的代码:

public class Student extends People {
private String collegeName;
private String studentType;
private final String studentID;

public Student(String firstName, String secondName, String telNo, String collegeName, String studentID, String studentType ) {
    super(firstName, secondName, telNo);
    this.studentID = studentID;
    this.collegeName = collegeName;
    this.studentType = studentType;

}

public String getStudentI() {
    String studentDet = getPeople() + collegeName + " " + studentType + " Student";
    return studentDet;


}
@Override
public String toString() {
    return "Student [name= " + firstName + ", second Name= " + secondName + " Telephone number= " + telNo + "college name= " + collegeName + " Student ID " + studentID + " Student Type= " + studentType + "]";
}
public class Uploader {

private String fileName = null;


private void getPath() {

    JFileChooser chooser = new JFileChooser();
    chooser.showOpenDialog(null);
    File f = chooser.getSelectedFile();
    setFileName(f.getAbsolutePath());
    System.out.println(getFileName());

}
void Uploader() {

    getPath();
    Path path = Paths.get(getFileName());

    try (Stream<String> lines = Files.lines(path)) {
        lines
                .flatMap(Uploader::lineToPerson)
                .forEach(System.out::println);

    } catch (IOException ioe) {

        ioe.printStackTrace();


    }
}


public static Stream<Student> lineToPerson(String line) {

    try {
        String[] elements = line.split(",");
        String firstName = elements[0];
        String secondName = elements[1];
        String telNo = elements[2];
        String collegeName = elements[3];
        String studentID = elements[4];
        String studentType = elements[5];


        Student p = new Student(firstName, secondName, telNo, collegeName, studentID, studentType);

        return Stream.of(p);


    } catch (Exception e) {

    }
    return Stream.empty();
}


public String getFileName() {
    return fileName;
}

public void setFileName(String fileName) {
    this.fileName = fileName;
}

}

共有1个答案

袁建木
2023-03-14

这里不需要使用flatMap()。简单的映射转换可以用来将line转换为Student对象,并将它们收集到一个列表中。

        List<Person> personList = new ArrayList();
        try (Stream<String> lines = Files.lines(path)) {
            personList = lines
                    .map(this::lineToPerson)
                    .collect(Collectors.toList());   
        } catch (IOException ioe) {    
            ioe.printStackTrace();
        }


        public Student lineToPerson(String line) {
            String[] elements = line.split(",");
            String firstName = elements[0];
            String secondName = elements[1];
            String telNo = elements[2];
            String collegeName = elements[3];
            String studentID = elements[4];
            String studentType = elements[5];

            return new Student(firstName, secondName, telNo, collegeName, studentID, studentType);

        }
 类似资料:
  • 问题内容: 假设我有一个对象,带有一些不错的方法: 将这个流写入文件 的 最短/最优雅的解决方案是 什么,每个流元素一行? 对于读取来说,有一个不错的方法,因此我认为必须有一种对称的方法可以写入文件,但是找不到。 只需要一个迭代。 问题答案: 也许最短的方法是使用与沿招其转换为: 例如: 如果看起来过于骇客,请使用更明确的方法: 如果您有一些自定义对象流,则始终可以添加步骤以应用该方法。

  • 我有一个带有字符串的数组列表,我想在日期中转换它。在下面的代码中,似乎不能使用“parse”来完成此操作: 但那不起作用。 你能帮帮我吗?

  • 我想知道你如何从一个文本文件中获取信息,并将其写入单独的数组列表中。 如你所见,上面有哺乳动物、鸟类和鱼类的群体!所以我将这些数组列表声明为。 目标是将人类、狗、老鼠和猫的字符串对象写入mammalList。然后将鸟写到鸟列表,将鱼写到鱼列表。 我知道如何使用缓冲读取器读取单个数组列表中的文本文件,但我不知道如何将每个动物分为各自的类别。非常感谢你的帮助! 下面是在Freestyle 076的帮助

  • 问题内容: 我正在用Java编写一个程序,该程序显示了一系列课后俱乐部(例如,EG Football,曲棍球-由用户输入)。俱乐部被添加到以下: 通过以下方法: ‘Club’是一个带有构造函数的类-名称: 我的程序正在运行-它使我可以将新的Club对象添加到我的数组列表中,可以查看该数组列表,还可以删除所需的任何内容,等等。 但是,我现在想将该arrayList(俱乐部)保存到文件中,然后我希望以

  • 我有一个包含这类内容的文件: AccountNumber=1000,BranchName='11',Balance=420,CustomerNumber=1 线程“main”java.io.StreamcorreptedException:无效的流头:6163636f在java.io.objectinPutStream.ReadStreamHeader(ObjectInPutStream.java