J2ME Daten aus txt Datei in Liste einlesen

MC_Basstard

Grünschnabel
Wenn ich das so deklariert habe:

Java:
 Display d = Display.getDisplay(this);         
    String zeichenkette;



Und diesen Code habe:

Java:
public void loadlist(){
        DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/buch.txt"));
          StringBuffer sb = new StringBuffer(); 
          int i = 0;
          zeichenkette="";
          try { 
             while ((i = dis.read()) > -1) {
                 char c = (char)i;
                 if (c == '\n') break;
               //if (c == '\r');
                 else sb.append(c);
                 i=i+1;
               }
             
            dis.close(); 
            zeichenkette=zeichenkette+sb.toString();
            
          } catch (IOException e) { 
            e.printStackTrace(); 
          } 
       }


Wird der Inhalt des Buffers doch bei

Java:
zeichenkette=zeichenkette+sb.toString();

eingetragen oder?

Denn in die Liste eingetragen hab ich die zeichenkette so:

Java:
 public void startApp() {   
         loadlist();
         lList.append(zeichenkette,null);
         lList.addCommand(cExit);   
         lList.setCommandListener(this);
         d.setCurrent(lList);
    }


Das heißt ich muss die zeichenkette dann wieder leeren oder?
 
Zuletzt bearbeitet:

matdacat

Erfahrenes Mitglied
Nein, das stimmt so nicht. Du willst doch vermutlich jede Zeile aus Deinem Textfile der Liste hinzufügen. Somit musst Du auch für jedes '\n' deineListe.append aufrufen. Am besten Du änderst loadList so ab, dass Dir die Methode einen Vector an Strings (nämlich die Zeilen Deines Textfiles) zurückliefert. Und diese String trägst Du dann über eine for-Schleife mit append in Deine Liste ein.
 

MC_Basstard

Grünschnabel
Jetzt bin ich n Stück weiter also zumindest liests jetzt schon mehr Zeilen in die Liste ein aber leider immer nur die Erste.
Jetzt hab ich 10 mal die erste Zeile in der Liste stehen und zwar innerhalb von [ ], also des steht dann z.B. so da:

[Hans Micha; AG-1]
[Hans Micha; AG-1]
[Hans Micha; AG-1]
[Hans Micha; AG-1]
[Hans Micha; AG-1]
[Hans Micha; AG-1]
[Hans Micha; AG-1]
...


Java:
public void loadlist(){
   	 DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/buch.txt"));
   	 StringBuffer sb = new StringBuffer();
   	 Vector lines = new Vector();
   	 int i=0 ;
   	 zeichenkette="";
   	 try{
   	 while ((i = dis.read()) > -1)
   	 		{ 
   		 	char ch = (char)i;
   		 	if (ch == '\n')
   		 		{ lines.addElement(sb.toString());
   		 		sb.delete(0,sb.length());
   		 		break;
   		 		}	 	
   		 	else 
   		 		sb.append(ch);
   		 	    i++;
   	 		}

   	    dis.close(); 
   	    zeichenkette=zeichenkette+lines;
   	    }
   	    catch (IOException e) { 
              e.printStackTrace(); 
              } 
    }


Java:
public void startApp() {   
    	 loadlist();
    	
    	 
    	 for ( int faktor = 1; faktor <= 2000; faktor ++ ) 
    	     {
    		 lList.append(zeichenkette,null);;
    	     }
         lList.addCommand(cExit);   
         lList.setCommandListener(this);
         d.setCurrent(lList);
    }


Wenn ich des break; hinmach, hab ich das wie oben dastehtn.
Wenn ich es weg mach, hab ich den ganzen inhalt der Datei in jeder Listenzeile stehen.
 

matdacat

Erfahrenes Mitglied
Was machst Du denn mit 'zeichenkette' oder 'faktor'? Hab hier mal ausm Kopf Deinen Code überarbeitet. Ohne Gewähr.

Java:
public Vector loadlist(){
   	 DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/buch.txt"));
   	 StringBuffer sb = new StringBuffer();
   	 Vector lines = new Vector();
   	 int i=0 ;
   	 try{
   	 while ((i = dis.read()) > -1)
   	 		{ 
   		 	char ch = (char)i;
   		 	if (ch == '\n')
   		 		{ lines.addElement(sb.toString());
   		 		sb.delete(0,sb.length());
   		 		break;
   		 		}	 	
   		 	else 
   		 		sb.append(ch);
   	 		}

   	    dis.close(); 
   	    }
   	    catch (IOException e) { 
              e.printStackTrace(); 
              } 
           return lines;
    }


Java:
public void startApp() {   
    	 Vector lines = loadlist();
    	    	 
    	 for ( int i = 0; i < lines.size(); i++) 
    	     {
    		 lList.append((String)lines.elementAt(i),null);
    	     }
         lList.addCommand(cExit);   
         lList.setCommandListener(this);
         d.setCurrent(lList);
    }
 
Zuletzt bearbeitet:

MC_Basstard

Grünschnabel
Ach so meintest du das, ich habe mich jetzt immer auf das zeichenketten String bezogen.

Aber großen Dank
Es geht endlich

Aber eine kurze Frage hätt ich noch und zwar:
Wie hast du J2ME so gut gelernt?
Und wüsstest du vlt eine Seite mit ein paar guten Tutorials für J2ME und vlt auch für solche Schleifen?

Gruß
Stefan
 

matdacat

Erfahrenes Mitglied
Gern geschehen. Spezielle Tutorials kann ich Dir nicht empfehlen, ich hab einfach viel gelesen und ausprobiert. Die wichtigste Grundvoraussetzung ist aber, bereits gut in Java programmieren zu können. Und daran scheiterts bei Dir noch ein bisschen. Konzentrier Dich also zuerst mal auf die Grundlagen wie Methoden, Schleifen, etc., die Du in jedem guten Java-Buch findest.
 

Flopro

Grünschnabel
Ich weiß, die Diskussion ist schon recht alt.
Da im Netzt aber immer noch keine gute Methode verfügbar ist, txt-Dateien zeilenweise als List-Elemente einzulesen, möchte ich euch hier meine geben. Sie ist sehr einfach und auch ohne viel Wissen zu verstehen.

Java:
import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class ReadFile extends MIDlet implements CommandListener{
    private Display display;
    private List list;


    public ReadFile(){
        display = Display.getDisplay(this);
    }

    public void startApp(){
        loadlist(/* Hier den Namen der Textdatei (txt) hinschreiben!! Wichtig: In Anführungszeichen!! */);
    }

    public void pauseApp(){}

    public void destroyApp(boolean unconditional){
        notifyDestroyed();
    }

    public void commandAction(Command c, Displayable s){
        
    }

    public void loadlist(String name){
        list = new List(name, List.IMPLICIT);

        DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/"+name+".txt"));
        StringBuffer sb = new StringBuffer();

        int i=0 ;
        try{
            while ((i = dis.read()) > -1)
            { 
                char ch = (char)i;
                if (ch == '\n')
                { list.append(sb.toString(),null);
                    sb.delete(0,sb.length());

                }       
                else 
                    sb.append(ch);
            }

            dis.close(); 
            
        }
        catch (IOException e) { 
            
        }
        display.setCurrent(list);
       
    }
}
 

Neue Beiträge