J2ME Daten aus txt Datei in Liste einlesen

MC_Basstard

Grünschnabel
Hallo Leute,

bin neu hier also bitte nicht so hart auf mir rumtrampeln wenn ich was falsch mach
Und ich weiß leider jetzt schon nicht ob ich hier richtig bin, aber ich habe leider kein Unterforum für J2ME gefunden.

Ich habe folgendes Problem:


Ich v ersuche aus einer txt Datei den Inhalt in eine Liste einlesen.

Im Java fürn PC hab ich es irgendwie so geschafft
Code:
public Telefonbuch() 
       { 
          try { 
             dateilesen(); 
             } 
          catch (Exception e){}; 
       } 
           
          public void dateilesen() throws IOException 
          {    
           
             DefaultTableModel model = new DefaultTableModel( 
             new Object[0][2],  //  2 == Spaltenzahl 
             new String[]{null}); 
              
              String[][] rowData = new String[2000][2]; 
           
              FileReader fr = new FileReader("H:/Temp/Maya/workspace/EIGENES PROJEKT/Telefonbuch.txt");    
             BufferedReader br = new BufferedReader(fr); 
             String zeile; 
              
             int i =0; 
             while ( (zeile = br.readLine()) != null ) 
             { 
                 String[] zeilenDaten = zeile.split(";"); 
                 rowData[i] = zeilenDaten; 
                 i=i+1; 
             } 
              
               
              
       String[] columnNames = { 
          "Name","Nummer"}; 
        
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE ); 
       JTable table = new JTable( rowData, columnNames ); 
       }



fürs handy hab ich es so versucht
Code:
public void loadlist(){ 
           System.out.println("bla"); 
        InputStream is = this.getClass().getResourceAsStream("/bin/handytest/buch.txt"); 
        //System.out.println(is.toString()); 
        StringBuffer sb = new StringBuffer(); 
        System.out.println("buffer"); 
          byte[] b = new byte[5000]; 
          System.out.println("buffer 0"); 
          zeichenkette=""; 
          System.out.println("buffer 1"); 
          try { 
              int chars, i = 0; 
              System.out.println("buffer 2"); 
              chars = is.read(); 
              System.out.println("buffer 3"); 
              while ((chars) != -1){ 
                 System.out.println("loop"); 
                 sb.append((char) chars); 
                 i=i+1; 
              } 
              is.close(); 
             zeichenkette=zeichenkette+b.toString(); 
              //return sb.toString(); 
           } 
        catch (IOException  ex) { 
           ex.printStackTrace(); 
           } 
        System.out.println("bla"); 
        list.append(zeichenkette,null); 
        //return null; 
      }

die System.out.println("..."); hab ich gemacht, da egal ob in Eclipse oder Netbeans der Debugger nicht funktionierte und ich so sehen konnte, wo das Programm nicht reingeht.

Dieser Fehler kommt immer:

bla
buffer
buffer 0
buffer 1
buffer 2
java.lang.NullPointerException
at handytest.handy.loadlist(+74)
at handytest.handy.commandAction(+4)
at javax.microedition.lcdui.List.callKeyPressed(+80)
at javax.microedition.lcdui.Display$DisplayAccessor.keyEvent(+198)
at javax.microedition.lcdui.Display$DisplayManagerImpl.keyEvent(+11)
at com.sun.midp.lcdui.DefaultEventHandler.keyEvent(+127)
at com.sun.midp.lcdui.AutomatedEventHandler.keyEvent(+210)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+114)
at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)




das heißt ab

chars = is.read();

machta nimma weiter aber was kann ich da jetzt genau machen find da leider keine Lösung dazu .
Und ich weiß schonmal garnich ob des eigentlich funktionieren kann was ich da vorhab xD
Leider kenn ich mich da nich so gut aus und hoffe das ihr mir helfen könnt.

MfG
Stefan
 
Zuletzt bearbeitet:

matdacat

Erfahrenes Mitglied
Dein Inputstream ist null, da das gewünschte File nicht gefunden wird: externe Files müssen unter J2ME im Unterverzeichnis 'res' liegen und entsprechend aufgerufen werden. Wenn das File nicht im JAR liegen soll, sondern irgendwo im Dateisystem des Handys, musst Du die Klasse Connector verwenden, um es zu öffnen.

Beispiele gibt's z.B. hier.
 
Zuletzt bearbeitet:

vfl_freak

Premium-User
Moin,

so wie die Fehlermeldung es schon sagt, greift Du hier auf einen Null-Pointer zu ! ;)

Leider kenne ich dieses "getResourceAsStream" nicht, aber versuch es mal so:

Java:
String strTestFile = "c:\IRGENDWAS\Test.txt";  // als Beispiel !
FileInputStream in = null;
in = new FileInputStream( strTestFile );
.....
in.close(); // nicht vergessen !

Gruß
Klaus
 

vfl_freak

Premium-User
Moin,

ja, leider hatte sich mein Post mit Deinem ersten überschnitten :-(

Da was Du da schriebst, war mir auch nicht wirklich klar :p

Danke und Gruß
Klaus
 

MC_Basstard

Grünschnabel
@matdacat

Die Datei soll schon im jar liegen ich hab die Datei überall in jedem Ordner da ich nicht genau wusste wo es liegen soll.

Des mit dem Connector versteh ich grad garnich, das hab ich alles noch nie gesehn da weiß ich garnich wie ich das dann in ne Liste einlesen kann.

Leider weiß ich es so auch nicht.
Mit meinem Arbeitskollegen (der sich in J2ME leider auch nicht auskennt) hab ich jetzt mal den Code hier geschrieben:

Code:
package handytest;

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

public class handy extends MIDlet implements CommandListener{
    List lList = new List ("Liste",List.IMPLICIT);
    Command cExit = new Command ("Exit",Command.EXIT,0);
    
    Display d = Display.getDisplay(this);         
    String zeichenkette;
    
    public void commandAction (Command cmd, Displayable dsp)
    {    
      if (cmd == cExit)
      {
         destroyApp (false);
         notifyDestroyed();
      }
    }   
    
    public void loadlist(){
   
    	DataInputStream dis = new DataInputStream(getClass().getResourceAsStream("/buch.txt"));
    	StringBuffer sb = new StringBuffer();
    	int i = 0;
    	byte[] b = new byte[5000];
        zeichenkette="";
    	try {
    	   while((i = dis.read()) > -1) {
    	      sb.append((char)i);
    	      i=i+1;
    	   }
    	   dis.close();
    	   zeichenkette=zeichenkette+b.toString();
    	} catch (IOException e) {
    	   e.printStackTrace();
    	}
    }
    
    public void startApp() {   
    	 lList.append(zeichenkette,null);
         lList.addCommand(cExit);        
                          
         lList.setCommandListener(this);
         d.setCurrent(lList);
    }    
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
    }
}


Ich versteh nicht, warum das immer 0 ist.
Die Datei existiert ja.
 

matdacat

Erfahrenes Mitglied
Habs grad selbst ausprobiert. Mit text.txt im res-Verzeichnis funktionierts wie folgt:

Java:
        try {
            DataInputStream in = new DataInputStream(getClass().getResourceAsStream("/text.txt"));
            int c;
            StringBuffer buffer = new StringBuffer();
            while ((c=in.read()) != -1) {
                buffer.append((char)c);
            }
            System.out.println(buffer.toString());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 

MC_Basstard

Grünschnabel
Cool großen Dank!!
Jetzt bin ich endlich n Schritt weiter nachdem ich schon wochen dran gescheitert bin.
Muss jetzt nur noch schaun wie ich jede Zeile aus der txt Datei in ne extra Zeile der liste einlesen kann.
Funktioniert leider nicht wie ichs am PC gemacht hab.
 

matdacat

Erfahrenes Mitglied
Siehst ja oben, dass ich jedes Zeichen einzeln einlese. Musst also einfach bei einem Zeilenumbruch ('\n') den Inhalt des Buffers in die Liste eintragen und ihn dann wieder leeren.