# Text in txt-Datei schreiben und nach ABC sortieren?



## MC_Basstard (22. Dez 2009)

Hallo Leute,

ich würde gerne, nachdem ich es durch großartige Hilfe geschafft habe Text von einer txt-Datei einzulesen, etwas hinzuzuschreiben, und in aplhabetischer Reihenfolge wieder zu speichern, dies auch ins J2ME übernehmen.

Doch macht mir das jetzt schon schwierigkeiten.

Das is dabei rausgekommen:


```
...

public class Datenschreiben extends JFrame implements ActionListener
{
	...
	
	String text = new String("");
	String zahl = new String("");	
	TextField tfName;
	TextField tfNummer;


	
	public Datenschreiben()
	{
                          ...
	
		getContentPane().setLayout(new FlowLayout());
		tfName = new TextField(text,20);
		add(new JScrollPane(tfName));
		tfName.setCaretPosition(0);
		tfName.setEditable(true);
		tfName.setFont(new Font("Arial", Font.PLAIN, 14));
		
		getContentPane().setLayout(new FlowLayout());
		tfNummer = new TextField(zahl,20);
		add(new JScrollPane(tfNummer));
		tfNummer.setCaretPosition(0);
		tfNummer.setEditable(true);
		tfNummer.setFont(new Font("Arial", Font.PLAIN, 14));
		
		...
		
		}
	
	
	public void schreiben() throws IOException{
        text = tfName.getText();
        zahl = tfNummer.getText();
        final List<String> lines = new ArrayList<String>();
        try{
            FileReader fr = new FileReader("Kopie von buch.txt");   
            BufferedReader br = new BufferedReader(fr);
            String zeile = null;
            while( (zeile = br.readLine()) != null )
            {
                lines.add(zeile);
            }
            lines.add(text + "; " + zahl + ";");
            br.close();
 
            Collections.sort(lines, String.CASE_INSENSITIVE_ORDER);
 
            BufferedWriter writer = new BufferedWriter(new FileWriter("Kopie von buch.txt"));
            for (String line : lines) {
                writer.write(line);
                writer.newLine();
            }
            writer.close();
            tfName.setText("");
            tfNummer.setText("");
        }
        catch(Exception e){}
    }
	
	

	   
	public void actionPerformed(ActionEvent aefiW4) {	
		
                         ...

		if (aefiW4.getSource().equals(buSpeichern)){
			try {
				schreiben();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return;
			}
	
	}															
}
```


Leider macht mir da des meiste Schwierigkeiten und ich weiß nicht was ich anstatt z.B. getText() hernehmen kann. 
Und die Arraylist macht mir leider auch große Probleme 

Gibt es fürs J2ME auch etwas, dass wie das getText() funktioniert? 
Ich habe mich zwar bei google erkundigt aber leider nicht wirklich etwas gefunden außer das dieses getText() sich auf ein StringItem bezieht, aber auch wenn ich den String text z.B. in StingItem text umbenenne funktioniert das nicht. 

Bitte um Hilfe

Gruß
Stefan


----------



## MC_Basstard (12. Jan 2010)

Ich fang lieber mal ganz von vorne an ^^

Wie kann ich einen Text in eine txt-Datei schreiben?

Dass ich quasi im Handy in ein Textfield etwas hineinschreibe, dann auf das Command "speichern" klicke und es mir das in die txt-Datei schreibt?

Ich habe das Textfield:

```
TextField tfname = new TextField("Name:", "", 50, 0);
```

welches ich beim pauseApp auf null gesetzt habe

```
tfname = null;
```


Das Command:

```
static final Command speichern = new Command("Speichern",Command.SCREEN,1);
```

Und am Ende hab ich das so angegeben:

```
public void commandAction(Command c, Displayable d) 
   {
	  
      String label = c.getLabel();
      if (label.equals("Speichern"))
      {
     	 System.out.println("es geht");
      }
```


Hier wollt ich einfach mal testen, ob das geht, das wenn ich auf Speichern klicke irgendetwas ausgegeben wird. Leider kommt immer dieser Fehler

java.lang.ClassCastException
	at handytest.handy.commandAction(+89)
	at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)
	at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)
	at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)
	at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47)
	at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+186)
	at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)


Wär schön wenn ich erstmal irgendetwas ausgeben kann wenn ich auf Speichern klicke, danach hoff ich das ihr mir helfen könnt, dass ich das was ich ins Textfield schreibe in eine txt-Datei speichern kann.

Hoff mir kann jemand helfen

Gruß
Stefan


----------



## MC_Basstard (14. Jan 2010)

Ok ich glaub meine Beiträge oben haben mehr verwirrt als das ihr mir helfen könnt xD

Ich fang nochmal von vorn an und schau das ichs besser erklären kann.

Das is jetzt mal der ganze Code den ich jetzt hab. Hab mal alles aus rausgelöscht, was nix mit dem hier zu tun hat:


```
package handytest;

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

public class handy extends MIDlet implements CommandListener {

	Form hinzufügen = new Form("Einträge hinzufügen");
	
	TextField tfname = new TextField("Name:", "", 50, 0);
	
	static final Command speichern = new Command("Speichern",Command.SCREEN,2);
    static final Command exitCommand = new Command("Exit", Command.STOP, 1);

	
	public handy() 
	{
		hinzufügen.append(tfname);
		hinzufügen.addCommand(exitCommand);
	    hinzufügen.addCommand(speichern);
	    hinzufügen.setCommandListener(this);
	}

	
	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());
      		 		}	
      		 	else 
      		 		sb.append(ch);
      	 		}
      	    dis.close();
      	    }
      	    catch (IOException e) {} 
      	return lines;
    }
	

	public void startApp() {
		Display display = Display.getDisplay(this);
		display.setCurrent(hinzufügen);
	}

	
	public void pauseApp()
	{
	    tfname = null;
	    hinzufügen = null;
	}

	
	public void destroyApp(boolean unconditional) 
	{
		notifyDestroyed();
	}
	
	
	public void commandAction(Command c, Displayable d) {

		String label = c.getLabel();
		 if (label.equals("Exit"))
      	 {
			destroyApp(true);
      	 } 
		 if (label.equals("Speichern"))
		 {
			loadlist();
	 		return;
	 	 }
	}
}
```


Ich habe eine txt-Datei in der etwas darin steht z.b.

Mike Mayer; IT
Susan Hoch; AS
Michael Groß; TR

Ich möchte nun in dem Textfield etwas hineinschreiben z.B. Stefan Weiß; BG, und dies in die txt-Datei mit dazu speichern und zwar in die, die ich im public Vector loadlist() aufgerufen habe, sodass am ende des drin steht:

Mike Mayer; IT
Susan Hoch; AS
Michael Groß; TR
Stefan Weiß; BG

Also ich würde gern etwas in das Textfeld schreiben, dann auf das Command speichern klicken, und dann das, was ich ins Textfeld geschrieben habe, in der txt-Datei unter dessen Inhalt stehen haben.


Hoff ihr könnt mir da jetzt weiterhelfen.

Gruß
Stefan


----------

