Lesen einer Zeile, ab bestimmter Stelle

Blind Guardian

Grünschnabel
Hi, ich wollt euch nochma lfragen ob mir jemand helfen könnte...

Habe folgendes Problem. Als Dateiinhalt habe ich z.B. folgende Sachen

User=xxx
Pwd=xxx
ID=xxx
...

Ich bräuchte nun ein bisschen Hilfe, um aus der Datei jeweil den Zeileninhalt nach dem "=" auszulesen. was vor dem "=" steht, bleibt immer gleich. Ich habe nun schon angefangen, "User=" usw als Stringvariable so im Programm zu lassen. Dann suche ich den jeweiligen String in der Datei und lese die Zeichen danach aus. klappt eigentlich ganz gut, bis auf folgende Problemchen...

Das was hinter dem "=" steht kann variabel in der Länge sein, können Buchstaben, Zahlen und Sonderzeichen sein.

Habe gehört, es besteht irgendwie die Möglichkeit mit get und set properties, leider weiss ich nicht direkt wie ich das anwenden muss.

Danke im vorraus Danilo

PS: Achtung Anfängergefahr
 
wenn du mehrere Einträge davon untereinander in der Datei hast, würde ich das so machen:
private static HashMap getProperties()
{
int index = 0;
String zeile = "";
String user = "";
String pwd = "";
String id = "";

try
{
RandomAccessFile raf = new RandomAccessFile(fileName,"r");
long cursor = 0;
long length = raf.length();

while (cursor < length)
{
zeile = raf.readLine();

if (! zeile.startsWith(" "))
{
index = zeile.indexOf('=');

if (zeile.startsWith("user"))
{
host = zeile.substring(index+1);
}
else if (zeile.startsWith("pwd="))
pwd = zeile.substring(index+1);

else if (zeile.startsWith("id="))
id = zeile.substring(index+1);

try
{
hm.put(user+"@"+pwd+"@"+id);
}
catch ( Exception e )
{
System.err.println("Exception: " +e.getMessage());
}
}

cursor = raf.getFilePointer();
}
catch (IOException e) {
System.out.println("error");
}
}
caruso
 
kleines beispiel:

Code:
    final String iniFile     = "password.properties";   



  private void iniFileReader() {
        try {
            StringTokenizer st;
            FileInputStream fis   = new FileInputStream(iniFile);
            Properties properties = new Properties();
            properties.load(fis);
            


            username  = properties.getProperty("username");         
           // das in den klammern ist eben username im Inifile d.h. er liest alles danach ein

            password  = properties.getProperty("Password");
            dbPort    = Integer.parseInt(properties.getProperty("dbPort"));

            port = (short) Integer.parseInt(properties.getProperty("port"));
            COMPort = properties.getProperty("SerialPort");
            

        } catch (Exception e1) {
                 JOptionPane.showMessageDialog(this, "Inifile konnte nicht initialisert 
                  werden!", "ERROR", JOptionPane.ERROR_MESSAGE);
                 e1.printStackTrace();
        }
    }
 
Zuletzt bearbeitet:
ja aber die sind doch irgendwie getrennt durch n komma so das du unterscheiden kannst wann der eine eintrag aufhört und der nächste anfängt.

dann nimmst einfach deinen "USER"
und zerlegst es....

StringTokenizer ts = new StringTokenizer(USER, ",");
int tsTokens = ts.countTokens();
for(int i = 0; i < nTokense; i++){
vUser.addElement(ts.nextToken()); // vUser is n vektor nur als beispiel
}
 
Also das mit dem Auslesen der Daten mit getproperties hat nun geklappt oder auch schon weilchen länger *fg*

Habe nun ein neues kleineres Problem.

Ich will anhand dieser beiden Marken einen Substring aus den Zeichen einer Datei haben. Ich komme soweit eigneltich damit klar. Ich kann von einer Marke bis zur nächsten marke den Substring machen oder von einer Marke bis zum Ende. wo ich jetzt ein kleines Problem habe wäre, das er den Substring machen soll, aber darauf achten muss, ob die zweite Marke kommt bzw es die zweite Marke gibt.

Er soll also das Problem auffangen, wenn es keine zweite Marke in diesem String gibt und dann nur bis zum Ende lesen.

Kann man den vielleicht irgendwie fragen ob diese Zeichenkette (zweite Marke) in dem String vorhanden ist oder nicht. Weil wenn ja dann kann ich die beiden möglichkeiten von Substring mit einer if-Anweisung machen.

Bin für jede Hilfe dankbar.
 
Wie wäre es mit sowas:
Code:
import java.util.StringTokenizer;

/**
 * @author       Snape
 */
public class TokenizerTest
{

  public static void main( String[] args )
  {
    String strTestString = "abcde|fghij|klmnopqrst";
    StringTokenizer tokenizer = new StringTokenizer(strTestString);
    String firstString = tokenizer.nextToken("|");
    System.out.println(firstString);
    String secondString = tokenizer.nextToken("|");
    System.out.println(secondString);
    String thirdString = tokenizer.nextToken("|");
    System.out.println(thirdString);
  }
}


Output:

abcde
fghij
klmnopqrst

Oder suchst Du etwas anderes?
 
Naja so in etwa kann man es vielleicht nutzen, weiss nicht genau...

Nehmen wir mal als Beispielstext folgenden.

"Halli Hallo mich beisst ein Floh, ich weiss nicht wo!
heute haben wir den 19.01.1982 und es ist schlechtes Wetter.es
regnet und ist zu warm für Schnee. Ich hoffe das wird sich bald
ändern und wir haben dann am 19.01.1992 besseres Wetter als
heute."

Die beiden Daten nehmen wir ins Auge. Das Programm soll jetzt alle Zeichen zwischen den beiden Daten in einen substring tun, wenn kein zweites Datum vorhanden ist soll der Substring vom ersten Datum bis zum Textende gehen. Ich bekomme es hin, mit substring(String) <<--- das er bis zum Ende liest oder substring( String, String) <<--- das er vom ersten Datum bis zum zweiten Datum liest...nur weiss ich nicht wie ich das verknüpfen soll...

Also wenn zweites Datum im Text vorhanden, dann substring bis dort, wenn nicht vorhanden dann substring bis Textende...Ich weiss nicht genau wie ich da eventuell eine if-Anweisung formulieren könnte...
 
Zurück