2011-05-05 111 views
0

您好,我從文本文件讀入數組時遇到了一些問題。在我的節目中,它與電影和演員保存在一起,保存後,首先用電影創建文本文件,然後用演員創建,每部電影和演員都有獨立的線。從文本文件讀取多個數組JAVA

我的問題是,當試圖讀直到一個點,使所有的電影進入電影數組和所有演員進入演員陣列時發生。我曾嘗試在文件的最後一部電影下放置一個寫入(換行符),然後執行一個while循環,直到該行爲null,然後結束該循環並轉到演員的新循環,直到文件結束爲止,但這不工作。

真的是卡住試圖讓這個工作,我是一個初學者在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

究竟出了什麼問題?你可以發佈一些代碼嗎? – 2011-05-05 10:50:01

+0

向我們展示一些代碼... – Manoj 2011-05-05 10:50:28

+1

...以及您嘗試解析的示例數據文件的代碼段也會很好。 – 2011-05-05 10:56:59

回答

0

沒有代碼或文件怎麼看起來很難給任何合格意見的例子,但是你可能做這樣的事情:

文件中的每一行都應該有一個標識符,不管它是代表電影還是演員,例如

M;Terminator 
A;Arnold Schwarzenegger 
... 

現在,你可以通過線環,通過使用String.split(";")得到識別,並把電影和演員到各自的陣列。

如果在兩部電影之間列出的每個演員都屬於上面的電影(例如阿諾德·施瓦辛格扮演終結者),那麼您可以記住最後一部電影並將每個新演員分配給它。當您獲得新電影時,您將替換上次保存的電影參考。

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 
    } 
} 
+0

+1 - 你的回答比我的回答快。 – 2011-05-05 10:59:00

+1

考慮到電影和演員總是在文件中交替出現,這將會很好。 – 2011-05-05 11:00:13

+0

while循環應該是'while(!EOF)' – Manoj 2011-05-05 11:03:57

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 = ""; 
     } 
    } 
} 

在最後你將有一個地圖,關鍵是一部電影的名字(電影名是唯一的,有希望!)並且該值是演員列表。

6

首先創建的文本文件,其中的電影和演員都將存儲在單獨的線路巡航能力連接到一個字符串 像

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

這將幫助您識別線contaning電影或演員 然後使用這個代碼

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 
    } 
} 
0

我想你文本文件的樣子:

START
泰坦尼克
阿凡達
矩陣

基努·裏維斯
約翰Trovalta
強尼·戴普
END

雖然u的雷丁一行行(請參閱http://www.roseindia.net/java/beginners/java-read-file-line-by-line.shtml)檢查空字符串即「 」。從下一個循環,你會發現演員(從這裏開始創建角色的新陣列。

所以帶走是的readLine慣於返回null新線將其返回空字符串「」,而不是

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 
     } 
    } 
0

你需要找一個條件(如你所說的空行)終止電影圈,然後開始演員循環。等待BufferedReader.readLine() == null將不起作用,因爲null僅在流的末尾返回。

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

    if(isMovie) { 
     addMovie(line); 
    } else { 
     addActor(line); 
    } 
} 

...或者,更好的結構化數據文件可以使工作更容易。