从文本文件读取到多个数组JAVA



嗨,我有一个小问题从文本文件读取到数组。在我的程序中,它与电影和演员一起保存,保存时,首先创建一个文本文件,然后是电影,然后是演员,每个电影和演员都有一个单独的行。

我的问题是发生时,试图读到一个点,使所有的电影进入一个电影数组和所有的演员进入一个演员数组。我试过在文件中的最后一部电影下放一个写(换行符),然后做一个while循环,直到行为空,然后结束循环,然后进入一个新的演员循环,直到文件结束,但这不起作用。

我真的被困在试图让这个工作,我是一个相当初学者的java,所以任何和所有的帮助将是感激的。

提前感谢。

[编辑]

我的问题是文件中的所有内容都进入一个数组,即movie数组。相反,我希望将影片放入movie数组,将演员放入演员数组。下面是到目前为止保存和加载文件的代码:

public void save(String fileName) throws FileNotFoundException {
    try {
        BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
        for ( int i = 0; i < nbrMovies; i++)
        {
        writer.write(movies[i].getName());
        writer.newLine();
        }
        writer.newLine();
        for (int n = 0; n < nbrActors; n++)
        {
            writer.write(actors[n].getFullName());
            writer.newLine();
        }
        writer.close();
    } catch(IOException ex) {
        ex.printStackTrace();
    }
}
public void load(String fileName) throws FileNotFoundException {
    try {
        BufferedReader reader = new BufferedReader(new FileReader(fileName));
        String line = null;
        while ((line = reader.readLine()) != null) {
            addMovie(line);
        }
        reader.close();

    } catch (Exception ex) {
        ex.printStackTrace();
    }

}

再次感谢:)[END EDIT]

[EDIT2]

下面的例子文件:)

testmovie

testmovie2

Firstname SecondnameFirstname2 Secondname2

[结束EDIT2]

首先创建文本文件,其中电影和演员将存储在单独的行中,并附加一个字符串像

movie:troy
movie:mission impossible
actor:brad pit
actor:tom cruse

将帮助您识别包含电影或演员的行然后使用以下代码

FileReader fr=new FileReader("E:\New folder\myfile.txt");
BufferedReader br=new BufferedReader(fr);
String str=null;
while((str=br.readLine())!=null)
{
    if(str.contains("movie"))
    {
        //store it into movie array
    }else if(str.contains("actor"))
    {
        //store it into actor array
    }
}

首先创建文本文件,其中电影和演员将存储在单独的行中,并附加一个标识符字符串。就像电影:特洛伊电影:不可能的任务演员:皮特演员:汤姆克鲁斯

将帮助您识别包含电影或演员的行然后使用以下代码

    FileReader fr=new FileReader(filepath);
    BufferedReader br=new BufferedReader(fr);
    String str=null;
    while((str=br.readLine())!=null)
    {
        if(str.contains("movie"))
        {
            //store it into movie array
        }else if(str.contains("actor"))
        {
            //store it into actor array
        }
    }

您可以通过只使用一个while循环和一个计数器来实现。

int counter = 0;
while(end of file){
  if(counter%2 == 0){
    // Movie Names, Add to Movie array
  }else{
    // Actor Names, Add to Actor array
  }
}

记录之间需要一个分隔符,用空行就可以了。读取算法应该是这样的:

List<String> lines = getAllLinesFromFile();  // some magic
Map<String, List<String>> movies = new HashMap<String, List<String>>();
String actualMovieName = "";
for (String line : lines) {
   if (actualMovieName.isEmpty()) {
      // the actual line is movie name
      actualMovieName = line.trim();
      movies.put(actualMovieName, new ArrayList<String>());          
   } else {
      // the actual line is not a movie name
      String actor = line.trim();
      if (!actor.isEmpty() {
        // the actual line is an actor name
        movies.get(actualMovieName).add(line);
      } else {
        // the actual line is a separator (empty line)
        actualMovieName = "";
      }
   }
}

最后你将得到一个映射,其中键是一个电影名(希望电影名是唯一的!),值是一个演员列表。

如果没有代码或文件外观的示例,很难给出任何合格的建议,但是您可以这样做:

文件中的每一行都应该有一个标识符,无论它代表的是电影还是演员,例如

M;Terminator
A;Arnold Schwarzenegger
...

现在您可以遍历行,使用String.split(";")获得标识符,并将电影和演员放入各自的数组中。

如果在两部电影之间列出的每个演员都属于上面的电影(例如阿诺德·施瓦辛格在《终结者》中饰演),你可以记住最后一部电影并为它分配每个新演员。当你得到一个新的电影,你替换最后保存的电影引用

我想你的文本文件看起来像:


开始《泰坦尼克号》
《阿凡达》
矩阵

基努Reaves
约翰Trovalta
约翰尼戴普
结束

当你逐行阅读时(请参考http://www.roseindia.net/java/beginners/java-read-file-line-by-line.shtml)检查空字符串即"。从下一个循环中,你将找到演员(从这里创建新的演员数组)。

因此,readLine不会为新行返回null它返回空字符串"而不是

您需要找到一个条件(例如您建议的空行)来终止电影循环,然后开始演员循环。等待BufferedReader.readLine() == null不能工作,因为null只在流的末尾返回。

boolean isMovie = true;
while ((line = reader.readLine()) != null)
{
   if(line.equals("")) {
      isMovie = false;
   }
   if(isMovie) {
      addMovie(line);
   } else {
      addActor(line);
   }
}

…或者,一个更好的结构化数据文件将使工作更容易。

相关内容

  • 没有找到相关文章

最新更新