【问题标题】:Java How to store content from text file to arraylistJava如何将文本文件中的内容存储到arraylist
【发布时间】:2020-05-09 20:35:13
【问题描述】:

首先我有一个类似的电影类,

public class Movie {
    private int duration;
    private String title;
    private int year;
    private ArrayList <Movie> movies;

    public Movie() {

    }

    public Movie(int duration,String title,int year) {  
        this.duration = duration;
        this.title = title;
        this.year = year;

    }


    public int getDuration() {
        return duration;
    }


    public void setDuration(int duration) {
        this.duration = duration;
    }


    public String getTitle() {
        return title;
    }


    public void setTitle(String title) {
        this.title = title;
    }


    public int getYear() {
        return year;
    }


    public void setYear(int year) {
        this.year = year;
    }



     public String toString() {
            return "Duration:" + this.duration + ",, "
                    + "Title:" + this.title + ",, " + "Year:"
                    + this.year;
     }
}

我有一个管理类来做一些操作。我在文本文件中有一些电影,我想将它们存储到 Movie 类型的 ArrayList 中。因此,为此我创建了一个方法,如下所示。

public void textFileToArrayList() {
    movie = new ArrayList<Movie>();
    BufferedReader br = null;
    Movie e = null;
    try {
        br = new BufferedReader(new FileReader("movies.txt"));
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    String line;
    try {
        while ((line = br.readLine()) != null) {
            String data[] = line.split("\t");
             e = new Movie();
             e.setDuration(Integer.parseInt(data[0]));
             e.setTitle(data[1]);
             e.setYear(Integer.parseInt(data[2]));

             movie.add(e);
        }
        for(Movie i : movie){
            System.out.println(i.getDuration()+","+i.getTitle()+","+i.getYear());
        }
        br.close();

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

我的问题是,当我调试时,我发现解析很好,但由于某种原因,我的电影 ArrayList 总是空的。使用ArrayList 时无法访问我的文本文件。我可以解析它,但我不能存储和打印。

我的完整代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.List;

import sait.mms.problemdomain.Movie;


public class MovieManagementSyste {

    ArrayList<Movie> movi = new ArrayList<Movie>();

public MovieManagementSyste() {
    textFileToArrayList();


    displayMenu();


}
public void textFileToArrayList() {
    movi = new ArrayList<Movie>();
    BufferedReader br = null;
    Movie e = null;
    try {
        br = new BufferedReader(new FileReader("movies.txt"));
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    String line;
    try {
        while ((line = br.readLine()) != null) {
            String data[] = line.split(",");
             e = new Movie();
             e.setDuration(Integer.parseInt(data[0]));
             e.setTitle(data[1]);
             e.setYear(Integer.parseInt(data[2]));

             movi.add(e);
        }
        for(Movie i : movi){
            System.out.println(i.getDuration()+","+i.getTitle()+","+i.getYear());
        }
        br.close();

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

【问题讨论】:

  • 是的,我正在创建新的 Movie 对象,因为我试图访问文本文件的所有行并将它们存储到数组列表中。
  • RE:您的更新。在第一个示例中,它被称为movi,在第二个示例中,它是movie。确保您正在运行/编译正确的代码。

标签: java oop arraylist


【解决方案1】:

我刚刚运行了代码,使用:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Movies {

    private List<Movie> movi;

    public static void main(String[] args) {
        Movies m = new Movies();
        m.textFileToArrayList();
    }

    public void textFileToArrayList() {
        movi = new ArrayList<Movie>();
        BufferedReader br = null;
        Movie e = null;
        try {
            br = new BufferedReader(new FileReader("movies.txt"));
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        String line;
        try {
            while ((line = br.readLine()) != null) {
                String data[] = line.split(",");
                 e = new Movie();
                 e.setDuration(Integer.parseInt(data[0]));
                 e.setTitle(data[1]);
                 e.setYear(Integer.parseInt(data[2]));

                 movi.add(e);
            }
            for(Movie i : movi){
                System.out.println(i.getDuration()+","+i.getTitle()+","+i.getYear());
            }
            br.close();

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

    private static class Movie{
        private int duration;
        private String title;
        private int year;
        public int getDuration() {
            return duration;
        }
        public void setDuration(int duration) {
            this.duration = duration;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public int getYear() {
            return year;
        }
        public void setYear(int year) {
            this.year = year;
        }

    }
}

... 对我来说很好用。电影列表打印到控制台。

【讨论】:

  • 我刚刚做了您所做的更改并再次尝试。并得到这个错误:线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“”
  • @Codeisacode 确保文件末尾没有空行。您还应该检查data.length == 3。另外,如果文件不是您期望的格式,请捕获可能的NumberFormatException
  • 文件末尾没有空行。我的样本如:84,美女与野兽,1991 120,大病,2017 117,外星人,1979 146,哈利波特与死亡圣器:第 1 部分,2010 169,霍比特人:意外之旅,2012 一些示例的标题有一个空白。可能有问题?
  • @Codeisacode 我认为标题中的空格不是问题。标题中是否有逗号?请参阅我之前关于检查data.length == 3 的评论。
  • @JohnnyMopp 是的,总是 data.length == 3。因为格式类型是这样的:“持续时间、标题、年份”。但有些标题中有一个特殊字符。比如这个:《加勒比海盗:黑珍珠号的诅咒》
猜你喜欢
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多