嗨我在从文本文件读取数组时遇到一些问题。在我的程序中,它与电影和演员一起保存,并且在保存时,首先创建一个带有电影的文本文件,然后是演员,每个电影和演员都有一个单独的行。
我的问题是在尝试读取到一个点时发生,以便所有电影都进入电影数组并且所有演员都进入演员阵列。我已经尝试在文件中的最后一个电影下放一个写(换行符),然后做一个while循环,直到该行为空,然后结束该循环并进入一个新的循环,直到文件的结尾,但这不是工作
我真的被困在试图让它工作,我是java的初学者,所以任何和所有的帮助将不胜感激。
提前致谢。
[编辑]
我的问题是文件中的所有内容都进入一个数组,即电影数组。相反,我希望电影进入电影数组,演员进入演员数组。下面是我目前保存和加载文件的代码:
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();
}
}
再次感谢:) [结束编辑]
[EDIT2]
以下示例文件:)
testmovie
testmovie2
名字Secondname Firstname2 Secondname2
[END EDIT2]
答案 0 :(得分:6)
首先创建文本文件,其中电影和演员将以单独的行存储,并附加一个字符串 像
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
}
}
答案 1 :(得分:5)
首先创建文本文件,其中电影和演员将以单独的行存储,并附有标识符字符串。 喜欢 电影:特洛伊 电影:任务不可能 演员:布拉德坑 演员:汤姆克鲁斯
这将帮助您识别线条电影或演员 然后使用此代码
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
}
}
答案 2 :(得分:2)
您只需使用一个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
}
}
答案 3 :(得分:1)
您需要在记录之间使用分隔符,空行应该可以解决问题。阅读算法应该是这样的:
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 = "";
}
}
}
最后你会得到一张地图,其中的关键是电影名称(电影名称是唯一的,希望!),价值是演员列表。
答案 4 :(得分:0)
如果没有代码或文件的示例,很难提供任何合格的建议,但您可能会这样做:
文件中的每一行都应该有一个标识符,无论它代表电影还是演员,例如
M;Terminator
A;Arnold Schwarzenegger
...
现在你可以遍历这些行,使用String.split(";")
获取标识符并将电影和演员放入各自的数组中。
如果在两部电影之间列出的每个演员都属于上面的电影(例如阿诺德施瓦辛格饰演的终结者),你可以记住最后一部电影并将每个新演员分配给它。当您获得新电影时,您将替换上次保存的电影参考。
答案 5 :(得分:0)
我认为你的textfile看起来像是:
START
泰坦尼克号
阿凡达
矩阵
Keanu Reaves
John Trovalta
Johny Depp
END
当你逐行排队时(请参考http://www.roseindia.net/java/beginners/java-read-file-line-by-line.shtml)检查空字符串,即“”。从下一个循环中你会找到Actors(从这里创建新的actor数组。
所以带走是readLine Wont为新行返回null它返回空字符串“”而不是
答案 6 :(得分:0)
您需要找到一个条件(例如您建议的空行)来终止电影循环,然后启动actor循环。等待BufferedReader.readLine() == null
将不起作用,因为null仅在流的末尾返回。
boolean isMovie = true;
while ((line = reader.readLine()) != null)
{
if(line.equals("")) {
isMovie = false;
}
if(isMovie) {
addMovie(line);
} else {
addActor(line);
}
}
...或者,更好的结构化数据文件可以使工作更轻松。