Hallo. Ich habe mir gerade eine kleine Methode gebastelt, die eine Text Datei Zeile für Zeile auslest und in einem Arraydeque speichert. Das erleichtert mir eines, da ich nicht im Vorhinein wissen muss, wieviele Zeilen die Textdatei hat. Jetzt beiße ich mir aber gerade die Zähne daran aus, das ArrayDeque in ein String Array umzuwandeln. Es funktioniert leider nur teilweise.
Wenn ich das ArrayDeque mittels toString() ausgebe, erhalte ich alle Einträge korrekt dargestellt.
Das StringArray wird richtig initialisiert, doch es werden nur die hälfte der 14 Elemente der Textdatei vom Arraydeque in das Array übertragen. (ab Zeile 55)
Die zweite hälfte befindet sich nach erneutem Ausgeben des ArrayDeques immer noch im Array.
Bitte um Gedankenanstoß, ich steh grad voll auf der Leitung! :bahnhof:
mfg suizi
Java:
package inout;importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;importjava.util.ArrayDeque;publicclass read {publicstaticvoidmain(String[] args){String[] test =txt("test");}/*txt(filename)
* Reads a *.txt file line by line, (requires only the filename with no extensions)
* safes it in an String arrayDeque,
* and returns the whole String Array.
*/publicstaticString[]txt(String fileName){
fileName=System.getProperty("user.dir")+"/"+ fileName +".txt";//creates Link to program directoryArrayDeque<String> contentArrayDeque =newArrayDeque<String>();String[] contentStringArray =null;try{BufferedReader in =newBufferedReader(newFileReader(fileName));String zeile ="";while(zeile !=null){
zeile = in.readLine();if(zeile !=null){//against NullPointerException
contentArrayDeque.addLast(zeile);}}
in.close();}catch(IOException e){System.out.println("Error reading the File! Check if the file is in the correct directory or named correctly!");
e.printStackTrace();}finally{//change ArrayDeque to normal String Arrayif(!contentArrayDeque.isEmpty()){
contentStringArray =newString[contentArrayDeque.size()];//initialize the String Arrayfor(int i =0; i<contentArrayDeque.size(); i++){
contentStringArray[i]= contentArrayDeque.pop();//pop the head off and add it into the String Array}}else{System.out.println("The txt-file was empty!");}}return contentStringArray;}}
Der Unfall passiert an dieser Stelle. Während du das ArrayDeque durchläufst, machst du es immer kleiner, weil du pro Durchlauf ein Element entfernst. D.h. du änderst beim Durchlaufen die Beendigungsbedingung.
Das Problem kannst du umgehen, indem du beispielsweise eine Bedingungsvariable einführst: