# Konsolenausgabe in TextArea ausgeben



## Cynric (23. Jun 2011)

Hallo, liebe Java-Gemeinde,

ich bin grade im 2. Semester meines Informatikstudiums, daher Java-Einsteiger mit ein bisschen Erfahrung.

Meine Frage ist folgende:
Ich schreibe zu Hause zur Übung und aus Langeweile ein kleines Programm, das unter anderem eine Methode hat, welches Verzeichnisse durchsucht (die Pfadnamen lasse ich mir in der Java-Konsole ausgeben, das funktioniert auch sehr gut).
Jetzt will ich aber diese Pfadnamen in einer JTextArea ausgeben lassen, nur wie bitte geht das?^^
Ich habs schon mit einer Schleife und .setText("Text") versucht, aber das funzt nicht.

Wär cool, wenn mir jemand so ein kleines Stückchen Code mit ner Erklärung zukommen lassen könnte.

Schon mal danke im Voraus!

Edit: Habe es auch schon mit .append("Text") versucht, aber da erscheint nichts, stattdessen wird für jeden Pfad ein neues Fenster erzeugt und ich habe das Gefühl, dass ich da mit Threads arbeiten muss, oder nicht?^^
Die GUI befindet sich in einer extra Klasse und in der Methode in der ich das Verzeichnis durchsuche, erzeuge ich eine neue GUI-Klasse. In der GUI-Klasse habe ich die TextArea als Attribut gesetzt und sage dann quasi: GUI-Klasse.text.append("BlaBla"), aber da wird für jeden ausgegebenen Pfad ein neues Fenster geöffnet, kA warum^^


----------



## jgh (23. Jun 2011)

du kannst es bspw. mit einem StringBuilder realisieren, hier mal ein kurzes Bsp, wie man alle Verzeichnisse, die direkt auf "C" liegen, auslesen und in einer Textarea darstellen kann.


```
import java.awt.BorderLayout;
import java.io.File;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class FileTextArea {

	private JFrame frame;
	private JTextArea tArea;
	private JScrollPane jsp;
	private StringBuilder sb = new StringBuilder();
	File file = new File("C://");

	public FileTextArea() {
		initComponents();
		searchFiles(file);
		frame.setVisible(true);
	}

	private void searchFiles(File file) {
		File[] files = file.listFiles();
		for (int i = 0; i < files.length; i++) {
			try {
				sb.append(files[i].getCanonicalPath() + "\n");
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		tArea.setText(sb.toString());

	}

	private void initComponents() {
		frame = new JFrame();
		frame.setSize(400, 400);
		frame.setLocationRelativeTo(null);
		tArea = new JTextArea();
		jsp = new JScrollPane(tArea);
		frame.add(jsp, BorderLayout.CENTER);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new FileTextArea();

	}
```


----------



## Cynric (23. Jun 2011)

Vielen Dank!


----------



## eRaaaa (23. Jun 2011)

sb.append(files_.getCanonicalPath() + "\n");

besser -->

sb.append(files.getCanonicalPath()).append('\n');





			Edit: Habe es auch schon mit .append("Text") versucht, aber da erscheint nichts, stattdessen wird für jeden Pfad ein neues Fenster erzeugt und ich habe das Gefühl, dass ich da mit Threads arbeiten muss, oder nicht?^^
		
Zum Vergrößern anklicken....


Klingt merkwürdig, das eine hat ja mit dem anderen nichts zu tun. append an sich würde schon gehen, extra Thread(s) wäre auch eine gute Idee, also an sich war der Gedanke richtig, die Umsetzung war wohl eher das Problem._


----------



## Cynric (23. Jun 2011)

Also jetz hab ich das soweit codiert, wie oben angegeben, die Pfadnamen erscheinen jetzt auch untereinander in der TextArea, aber trotzdem wird für jeden Pfadnamen ein neues Fenster generiert, kA warum, jemand ne Idee, woran das liegen könnte?


----------



## eRaaaa (23. Jun 2011)

Zeige uns doch mal ein wenig Code.


----------



## Cynric (23. Jun 2011)

```
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;


public class BrowserPath {
    
    /*
     * Attribute
     */
    private LinkedList<String> filelist;
    
    protected boolean found = false;
    protected char sepchar = java.io.File.separatorChar;
    
    private StringBuilder sb = new StringBuilder();
    
    /*
     * Konstruktoren
     */
    public BrowserPath () {
        
    }
    
    /*
     * Methoden
     */
    
    /*
     * Normalisierung des Pfadnamens & Abspeichern der Dateien
     */
    public void normalizeAndCut (String path) {
        
        if (java.io.File.separatorChar == '/') {
            path = path.replace('\\', java.io.File.separatorChar);
            
            if(path.contains(":")) {
                path = path.replace(':', java.io.File.separatorChar);
                path = java.io.File.separatorChar + path;
            }
           
        }
        else if(java.io.File.separatorChar == '\\') {
            path = path.replace('/', java.io.File.separatorChar);
        }

        
    }
    /*
     * normalizeAndCut Ende
     */
    
    /*
     * Rekursives Durchsuchen der Laufwerke nach Browsern
     */
    public void searchBrowser (File path) {
        
        File[] files = path.listFiles();        
        Interface ic = new Interface();
 
        if (files != null) {
            
            for (int i=0; i<files.length; i++) {
                
                try {
                    sb.append(files[i].getCanonicalPath()).append('\n');
                } 
                catch (Exception e) {
                    e.printStackTrace();
                }
                
                ic.text.append(sb.toString());
                
                if (files[i].isDirectory()) {
                    searchBrowser(files[i]); 

                } 

                if (files[i].toString().contains("iexplore.exe") | 
                    files[i].toString().contains("firefox.exe") | 
                    files[i].toString().contains("safari.exe") |
                    files[i].toString().contains("opera.exe") | 
                    files[i].toString().contains("chrome.exe") | 
                    files[i].toString().contains("netscape.exe")) 
                {        
                    found = true;
                    
                    //Das Einfügen in die Liste funktioniert noch nicht richtig
                    filelist = new LinkedList<String>();
                    filelist.add(i, files[i].toString());
                    //----------------------------------------------------------
                    
                }
                
            }   
        }        
        
    }
    /*
     * searchBrowser Ende
     */
    
    /*
     * Durchlaufen aller möglichen Laufwerksbuchstaben von A-Z
     */
    public void exploreDrive () {
        
        char letter;
        File drive = null; 
        
        while (!found) {
            for (letter='A'; letter<='Z'; letter++) { 
                drive = new File(letter + ":" + sepchar);
                searchBrowser(drive);
                
                if (found) { 
                    break;
                    
                }
            }
        }
        
    }
    /*
     * exploreDrive Ende
     */
    
    /*
     * Getter-Methoden
     */  
    public LinkedList<String> getFilelist () {
        
        return filelist;
    }
    /*
     * Getter-Methoden Ende
     */
    
}
```

Kurz zur Erklärung, diese Klasse sucht nach Internetbrowsern auf der Festplatte, den Sinn dahinter müsst ihr nich verstehen^^
Die GUI hab ich in einer eigenen Klasse Interface implementiert


----------



## eRaaaa (23. Jun 2011)

```
while (!found) {
            for (letter='A'; letter<='Z'; letter++) { 
                drive = new File(letter + ":" + sepchar);
                searchBrowser(drive);
```
du rufst also öfters 
	
	
	
	





```
searchBrowser
```
 auf, in dieser Methode steht die Zeile : 
	
	
	
	





```
Interface ic = new Interface();
```
Kein Wunder dass also mehrere Fenster aufgerufen werden


----------



## Cynric (23. Jun 2011)

Ach, verdammt!
Ja stimmt!

d.h. wenn ich die Interface-Klasse als Attribut setze oder im Konstruktor aufrufe, sollte es gehen, oder?

Edit: Es klappt jetzt genau so, wie ich mir das vorgestellt habe, vielen Dank!


----------

