Textdatei komplett auslesen

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Guten Tag,

wie ist es möglich eine Textdatei komplett auszulesen, oder nur zu einem Teil? Ist dies überhaupt sinnvoll wenn wir mal annehmen das die Textdatei 100MB oder größer ist dies als "RiesenString" im Hauptspeicher zu lassen.

Mein Problem besteht darin, ich habe eine XML Datei. Diese kann nach belieben aufgebaut werden, also z.b. das endtag muss nicht auf der selben Zeile stehen.

<tag> text text
</tag>

usw gibt viele derartige Beispiele. Nur ich habe zwar die "tag-namen" doch ich muss jetzt alles was zwischen diesen sich befindet herrausnehmen und in eine neue Datei speichern.

Jemand eine Idee...?

p.s.:Mir fält gerade eine man könnte immer eine zeile weiter springen bis das /tag> zeichen folgt. Nur was ist wenn man

<tag>
<tag2></tag2>
<tag3></tag3>
</tag>

hat und nur tag und tag2 haben will ....
 

Titanpharao

Bekanntes Mitglied
Hm....

Ich habe einen Tree, wo all Tags aufgeführt sind.
Diese kann man anklicken und dann auf einen Button klicken.
Dann wird eine neue Datei erstellt, welche nur die angeklickten Tags in die Datei reinschreibt.
Wie soll das mit einem Parser gehen? Der weis doch nicht welche angeklicht wurden.

Abgesehen davon habe ich das in verschiedenen Modulen :(
 

Murray

Top Contributor
Titanpharao hat gesagt.:
Dann wird eine neue Datei erstellt, welche nur die angeklickten Tags in die Datei reinschreibt.
Wie soll das mit einem Parser gehen? Der weis doch nicht welche angeklicht wurden.
Na, wenn du beim Klicken die Datei selbst einlesen kannst, dann kannst du das an der Stelle auch mit einem XML-Parser machen.

Wie bist du denn zur Liste der Tags gekommen? Mit einem XML-Parser, oder durch Suchen in der Textdatei?
 

Titanpharao

Bekanntes Mitglied
Poste mal denn Code...aber bitte jetzt nicht alles durcheinanderbringen :bahnhof:
Ich bin so froh, das der Baum mit denn Tags und klicken funktioniert.

Code:
package xml;

import java.io.File;
import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class VSXwV {
	public XMLTreeHandler handler;
	public TreeModel parse(String filename) {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    handler = new XMLTreeHandler();
    try {
      // Parse the input.
      SAXParser saxParser = factory.newSAXParser();
      saxParser.parse(new File(filename), handler);
    } catch (Exception e) {
      System.err.println("File Read Error: " + e);
      e.printStackTrace();
      return new DefaultTreeModel(new DefaultMutableTreeNode("error"));
    }
    return new DefaultTreeModel(handler.getRoot());
  }

  public static class XMLTreeHandler extends DefaultHandler {
	
	public ArrayList<XSD> xsdschema = new ArrayList<XSD>();
	int nr=0;
	  
    private DefaultMutableTreeNode root, currentNode;
    public DefaultMutableTreeNode getRoot() {
      return root;
    }

    // SAX Parser Handler methods...

    public void startElement(String namespaceURI, String lName,
          String qName, Attributes attrs) throws SAXException {
          String eName = lName; // Element name
          if ("".equals(eName))
            eName = qName;
          Tag t = new Tag(eName);
          DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(t);

          boolean set=true;
          
          if(currentNode==null){
          xsdschema.add(new XSD(newNode,nr,0));
          }
          else{
        	  int anz=xsdschema.size();
        	  for(int x=0;x<anz;++x){
        		  if(newNode.equals(xsdschema.get(x).dmtn))set=false;
        	  }
        	  if(set)
              for(int i=0;i<anz;++i){
            	  if(currentNode.equals(xsdschema.get(i).dmtn)){
            		  for(int j=i;j<anz;++j){
            			  if(newNode.toString().equals(xsdschema.get(j).dmtn.toString())&&xsdschema.get(j).vaterele==i){
            				set=false;	  
            			  }
            		  } 
   					  if(set){
   						  nr++;
   						  xsdschema.add(new XSD(newNode,nr,i));
   					  }
            		  break;
            	  }
              }       
          }
          /*if(set){
          System.out.print(xsdschema.get(nr).dmtn+"\t");
          System.out.print(xsdschema.get(nr).elenr+"\t");
          System.out.println(xsdschema.get(nr).vaterele);
          }*/ 
          if (currentNode == null) {
            root = newNode;
          } else {
        	  currentNode.add(newNode);
          }
          currentNode = newNode;
     }

    public void endElement(String namespaceURI, String sName, String qName)
        throws SAXException {
      currentNode = (DefaultMutableTreeNode) currentNode.getParent();
    }
    
    public void characters(char buf[], int offset, int len)
        throws SAXException {
      String s = new String(buf, offset, len).trim();
      //System.out.println(s); Enthaltende Werte 
      ((Tag) currentNode.getUserObject()).addData(s);
    }
}

  public static class Tag {
    private String name;

    private String data;

    public Tag(String n) {
      name = n;
    }

    public String getName() {
      return name;
    }

    public void setData(String d) {
      data = d;
    }

    public String getData() {
      return data;
    }

    public void addData(String d) {
      if (data == null) {
        setData(d);
      } else {
        data += d;
      }
    }

    public String toString() {
      return name;
    }
  }
}

Das der Code zum Parsen und in eine bestimme Form zu bringen, die ich beim Tree benötige. und der sieht zum teil so aus...

Code:
		CheckNode[] nodes = new CheckNode[anz];
	    for (int i=0;i<anz;i++) {
	      nodes[i] = new CheckNode(xsdschema.get(i).dmtn);
	    }
	    for(int i=1;i<anz;++i){
	    	nodes[xsdschema.get(i).vaterele].add(nodes[xsdschema.get(i).elenr]);
	    }
	    nodes[0].setSelected(true);
	    JTree tree = new JTree( nodes[0] );
	    tree.setCellRenderer(new CheckRenderer());//Erzeugt die Checkboxen
	    tree.putClientProperty("JTree.lineStyle", "Angled");
	    tree.addMouseListener(new NodeSelectionListener(tree));

package gui;

import java.util.*;
import javax.swing.tree.*;


public class CheckNode extends DefaultMutableTreeNode {

  public final static int SINGLE_SELECTION = 0;
  public final static int DIG_IN_SELECTION = 4;
  protected int selectionMode;
  protected boolean isSelected;

  public CheckNode() {
    this(null);
  }

  public CheckNode(Object userObject) {
    this(userObject, true, false);
  }

  public CheckNode(Object userObject, boolean allowsChildren
                                    , boolean isSelected) {
    super(userObject, allowsChildren);
    this.isSelected = isSelected;
    setSelectionMode(DIG_IN_SELECTION);
  }


  public void setSelectionMode(int mode) {
    selectionMode = mode;
  }

  public int getSelectionMode() {
    return selectionMode;
  }

  public void setSelected(boolean isSelected) {
    this.isSelected = isSelected;
    
    if ((selectionMode == DIG_IN_SELECTION)
        && (children != null)) {
      Enumeration enumX = children.elements();      
      while (enumX.hasMoreElements()) {
        CheckNode node = (CheckNode)enumX.nextElement();
        node.setSelected(isSelected);
      }
    }
  }
  
  public boolean isSelected() {
    return isSelected;
  }
}

Ist noch viel länger auf jeden Fall kann ich die Nodes ansprechen und herrausfinden, welche Select sind und welche nicht. Würde da auch gern weiterhin ansetzen. Vielleicht jetzt nochmal alles Parsen und sich nur auf die Tags beziehen, wo select auf True steht?
 

Murray

Top Contributor
Würdest du die Datei mit einem baumbasierten Ansatz (DOM oder JDOM) parsen, dann hättest du ja den gesamten Baum im Speicher und könntest zu jedem Tree-Node die entsprechende Referenz im XML-Dom halten. Leider sind die Dateien ja wohl ziemlich groß, was eigentlich einen ereignisgetriebenen Parser erfordert (hast du ja auch benutzt). Vielleicht ist StAX eine Alternative für dich; damit hat man Zugriff auf Knoten im DOM, ohne dazu das gesamte DOM im Speicher halten zu müssen.

Falls du bei SAX bleiben willst, musst du die Datei wohl erneut parsen und beim startElement prüfen, ob es sich um ein angeklicktes Element handelt und in dem Fall alle weiteren Element in die Datei schreiben, bis das Element wieder beendet wurde.
 

Titanpharao

Bekanntes Mitglied
Ich würde auch gern denn JDOM benutzen, habe nur das andere eher gefunden.

Code:
      CheckNode[] nodes = new CheckNode[anz];
       for (int i=0;i<anz;i++) {
         nodes[i] = new CheckNode(xsdschema.get(i).dmtn);
       }
       for(int i=1;i<anz;++i){
          nodes[xsdschema.get(i).vaterele].add(nodes[xsdschema.get(i).elenr]);
       }
       nodes[0].setSelected(true);
       JTree tree = new JTree( nodes[0] );

Diese Zeilen erstellen ja denn Baum. Ist es möglich die Werte aus dem JDOM Baum zu bekommen?

Bzw wie kann ich die "tabs" aus der Document herrausbekommen?

*noch bissel am rumspielen*
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
LeoDerKek Textdatei in JAR-File Java Basics - Anfänger-Themen 4
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
D Input/Output Mehrzeiligen String aus Textdatei erstellen Java Basics - Anfänger-Themen 5
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
X Textdatei: zwei-zeilenweise gleiche Zeilen rausschmeißen Java Basics - Anfänger-Themen 21
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
S Importieren einer Textdatei Java Basics - Anfänger-Themen 2
x-tshainge Innerhalb von Textdatei addieren Java Basics - Anfänger-Themen 9
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2
JDimi Textdatei mit beliebig vielen Zeilenumbrüchen erstellen Java Basics - Anfänger-Themen 2
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
G Wert in Textdatei ersetzen? Java Basics - Anfänger-Themen 2
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
C Input/Output Textdatei vom Java-Programm nicht geladen Java Basics - Anfänger-Themen 58
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
T Länge einer Textdatei Java Basics - Anfänger-Themen 11
S Übertragen einer Textdatei in ein 2d-Array Java Basics - Anfänger-Themen 2
N Integers aus Textdatei auslesen und mehrere Arrays erstellen Java Basics - Anfänger-Themen 9
T Textdatei öffnen und ans Ende scrollen Java Basics - Anfänger-Themen 11
J Textdatei filtern und bearbeiten Java Basics - Anfänger-Themen 1
C Textdatei oder doch eine Datenban Java Basics - Anfänger-Themen 15
J Input/Output Tilemap effizient speichern als Textdatei Java Basics - Anfänger-Themen 7
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
M Textdatei(en) in .jar schreiben Java Basics - Anfänger-Themen 5
K Textdatei auslesen Java Basics - Anfänger-Themen 10
H Input/Output Inhalt einer GUI in Textdatei speichern Java Basics - Anfänger-Themen 1
K Erste Schritte Textdatei -> Array Java Basics - Anfänger-Themen 1
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
F Problem mit Tabulatoren bei Zeilen zählen einer Textdatei Java Basics - Anfänger-Themen 17
G Erste Schritte Textdatei einlesen und in Array speichern Java Basics - Anfänger-Themen 5
F Textdatei einlesen und Zeilen zählen Java Basics - Anfänger-Themen 10
L Namen aus Textdatei auslesen Java Basics - Anfänger-Themen 1
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
M Zweidimensionales Array aus Textdatei gewinnen Java Basics - Anfänger-Themen 6
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
S Methoden Textdatei auslesen Java Basics - Anfänger-Themen 11
G Textdatei auf Dubletten prüfen Java Basics - Anfänger-Themen 8
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
T Textdatei beschreiben/bearbeiten Java Basics - Anfänger-Themen 4
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
C auslesen bestimmter werte einer textdatei und anschl. hineinschreiben in eine neue txt-datei. Java Basics - Anfänger-Themen 2
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
C Einlesen in Array von Textdatei sehr langsam Java Basics - Anfänger-Themen 7
R Werte in eine Textdatei schreiben Java Basics - Anfänger-Themen 20
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
D Textdatei in geschachtelte Array speichern Java Basics - Anfänger-Themen 17
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
P Input/Output Textdatei einlesen - 1. Zeichen fehlt Java Basics - Anfänger-Themen 7
J Input/Output Textdatei in einer JAR lesen Java Basics - Anfänger-Themen 3
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
J Textdatei einlesen und ausgeben - NullPointerException Java Basics - Anfänger-Themen 5
M Input/Output Objekte in einer Textdatei ablegen (Highscore) Java Basics - Anfänger-Themen 9
P CSV Daten in Textdatei Speichern Java Basics - Anfänger-Themen 3
K Input/Output Eingelesenedaten von Scanner als Textdatei ausgeben? Java Basics - Anfänger-Themen 2
N Input/Output Konsolenausgabe in Textdatei speichern/umleiten Java Basics - Anfänger-Themen 7
V Auf Textdatei in jar zugreifen Java Basics - Anfänger-Themen 3
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
S Methoden Textdatei Teil String auslesen Java Basics - Anfänger-Themen 3
H Zeile aus Textdatei lesen und in Textfield schreiben Java Basics - Anfänger-Themen 4
J durch drücken eines buttons text in einer textdatei speichern Java Basics - Anfänger-Themen 2
W letzte Zeile aus wachsender Textdatei auslesen Java Basics - Anfänger-Themen 5
algebraiker Textdatei-Import Java Basics - Anfänger-Themen 8
M Datum aus einer Textdatei holen Java Basics - Anfänger-Themen 9
C Spalte einer Textdatei einlesen Java Basics - Anfänger-Themen 10
Fab1 Input/Output Textdatei auslesen Java Basics - Anfänger-Themen 4
O grosse Textdatei performant als string speichern Java Basics - Anfänger-Themen 8
P Mit offset aus Textdatei auslesen Java Basics - Anfänger-Themen 3
C Textdatei einlesen Java Basics - Anfänger-Themen 8
V Falsches Auslesen von Textdatei Java Basics - Anfänger-Themen 3
T Input/Output 20Mb Textdatei zeilenweise auslesen Java Basics - Anfänger-Themen 10
N Textdatei lesen mit Umlauten Java Basics - Anfänger-Themen 16
N In Textdatei speichern und auslesen Java Basics - Anfänger-Themen 18
M Textdatei einlesen Java Basics - Anfänger-Themen 3
M Liste in Textdatei schreiben Java Basics - Anfänger-Themen 7
B Input/Output Textdatei einlesen Windows / Linux Java Basics - Anfänger-Themen 2
F Textdatei einlesen Java Basics - Anfänger-Themen 7
C Textdatei einlesen -> Probleme Java Basics - Anfänger-Themen 3
K Input/Output Textdatei scheibchenweise auslesen Java Basics - Anfänger-Themen 8
S Textdatei stückweise einlesen Java Basics - Anfänger-Themen 7
D 1 Wort aus TextDatei auslesen Java Basics - Anfänger-Themen 3
J Jede Zeile der Textdatei in ListUI eintragen Java Basics - Anfänger-Themen 2
N Textdatei wird beim Speichern nicht überschrieben, sondern ergänzt Java Basics - Anfänger-Themen 4
A Double Array in TextDatei schreiben Java Basics - Anfänger-Themen 9
K Richtige Pfadangabe einer Textdatei Java Basics - Anfänger-Themen 7
B OOP Aus Textdatei auslesen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben