fileoutputstream ändern

alex8686

Mitglied
hallo leute, bräuchte eure kleine hilfe wie dem auch sei 🙂 würde gerne meine Userregistrierung vom chat etwas umgestalten um auch andere projekte an die datenbank anzubinden.!

bsp: nickname³passwort³23³7³297³#99ccff³14.07.2011 06:26:35³ <-- so wird es momentan gespeichert, in einem textfile. also username.txt

würde es aber gerne so haben wollen zb:
nickname=admin
passwort=passwort
alter=23

hier ein kleiner ausschnitte aus dem javaquellcode , der ist für die userregistrierung zuständig:

Java:
SPEICHERN:
    public void userchanged(String s)
    {
        String s1 = "";
        Object obj = null;
        boolean flag = false;
        try
        {
            String as[] = (String[])users.get(s.toLowerCase());
            if(as[0].indexOf("/") == -1 && as[0].indexOf(".") == -1)
            {
                FileOutputStream fileoutputstream = new FileOutputStream("db/" + as[0] + ".txt");
                PrintStream printstream = new PrintStream(fileoutputstream);
                String s2 = "";
                for(int i = 0; i < 22; i++)
                {
                    if(as[i] != null && as[i].indexOf("\263") != -1)
                        as[i] = master.pstring.replace(as[i], "\263", "");
                    s2 = s2 + as[i] + "\263";
                }

                printstream.println(s2);
                fileoutputstream.close();
            }
        }
        catch(Exception exception)
        {
            System.out.println(exception.toString());
        }
    }

AUSLESEN:
    public void loadFromZip()
    {
        try
        {
            System.out.println("Registrierte Benutzer werden geladen");
            users.clear();
            File file = new File("db");
            String as[] = file.list();
            for(int i = 0; i < as.length; i++)
                try
                {
                    FileInputStream fileinputstream = new FileInputStream("db/" + as[i]);
                    DataInputStream datainputstream = new DataInputStream(fileinputstream);
                    String s = "";
                    for(String s1 = ""; (s1 = datainputstream.readLine()) != null;)
                        s = s + s1;

                    String as1[] = (String[])readNext(s);
                        users.put(as1[0].toLowerCase(), as1);
                    fileinputstream.close();
                }
                catch(Exception exception1) { }

            Registry _tmp = this;
            ChatServer.readuser = "0";
        }
        catch(Exception exception) { }
    }
ich sag keinem das er das für mich machen soll, sondern nur tipps wenn möglich. achja ³ = \263

Mfg und danke im vorraus!🙂
 
Zuletzt bearbeitet von einem Moderator:
Meinst du so etwas?
Du könntest nebenbei gesagt auch Properties nehmen 🙂

Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Scanner;

public class Test {
	private static void write(String s1, String s2, String s3){
		FileOutputStream fos;
		try {
			fos = new FileOutputStream(new File("Pfadangabe"));
			fos.write(("name=" + s1).getBytes());
			fos.write(("\npasswort=" + s2).getBytes());
			fos.write(("\nalter=" + s3 ).getBytes());
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private static Object[] read(File f){
		ArrayList<String> str = new ArrayList<String>();
		try {
			Scanner sc = new Scanner(new FileInputStream(f));
			while(sc.hasNextLine()){
				str.add(sc.nextLine());
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return str.toArray();
	}
	
	public static void main(String[] args){
		write("Hans", "qwert", "10");
		for(Object s : read(new File("Pfadangabe")))
			System.out.println(s);
	}
}
 
Das finde ich sogar noch flexibler, wenn z. B. ein Parameter in der Mitte hinzukommt. Da hätte man mit dem Array grobe Probleme.

Java:
package javaforum;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;

public class SaveNLoad
{
	private static final String SAVE_ARGUMENT = "username=%s\npassword=%s\nage=%s";
	private static final int NEEDING_ARGUMENTS;
	
	static
	{
		int j = 0;
		for(int i = 0, size = SAVE_ARGUMENT.length() - 1; i < size; i++)
		{
			if(SAVE_ARGUMENT.charAt(i) == '%' && SAVE_ARGUMENT.charAt(i + 1) == 's')
				j++;
		}
		NEEDING_ARGUMENTS = j;
	}
	private static void write(String path, String... args)
	{
		write(new File(path), args);
	}
	private static void write(File file, String... args)
	{
		if(args.length != NEEDING_ARGUMENTS)
			throw new IllegalArgumentException("Unexceped count of arguments: " + NEEDING_ARGUMENTS + " excepted.");
		
		if(!file.exists())
		{
			try
			{
				file.createNewFile();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		
		BufferedWriter bos = null;
		try
		{
			bos = new BufferedWriter(new FileWriter(file));
			bos.write(String.format(SAVE_ARGUMENT, (Object[])args));
		}
		catch (Exception e)
		{
            e.printStackTrace();
        }
		finally
		{
			try
			{
				if(bos != null)
				{
					bos.flush();
					bos.close();
				}
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}
	private static Map<String, String> read(String path)
	{
		Map<String, String> map = new HashMap<String, String>();
        
		BufferedReader br = null;
		Pattern pattern = Pattern.compile("=");
		try
        {
			br = new BufferedReader(new FileReader(path));
			for(String line = null; (line = br.readLine()) != null;)
			{
				String[] split = pattern.split(line, 0);
				if(split.length != 2)
					throw new IOException("Illegal Line: " + line);
				
				map.put(split[0], split[1]);
            }
        }
		catch (IOException e)
		{
            e.printStackTrace();
        }
		finally
		{
			try
			{
				if(br != null)
					br.close();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		return(map);
	}
	public static void main(String[] args)
	{
		write("volvagia", "volvagia", "1A1DC91C907325C69271DDF0C944BC72", "21");
		Map<String, String> map = read("volvagia");
		
		for(Entry<String, String> entry:map.entrySet())
			System.out.println(entry.getKey() + " = " + entry.getValue());
	}
}
 
🙂

wollte eig die alte registrierung beibehalten und alles untereinander anlegen

nickname=alex
passwort=blablabla
alter=25
ort=Berlin

Er soll in die user.txt zb reinschreiben

Nickname=user.getnickname
passwort=get.PW
alter=get.alt
 
hallo habe es soweit hinbekommen:

auszug aus user.txt <--registrierung


nickname=loldb
passwort=sagichnicht
alter=25
level=100
onlinezeit=0
color=000000
lastlogin=25.09.2011 06:36:02
picurl=http://pic.url.de
freunde=
email=db@testmail.de
homepage=http://dbpage.de
null=null
geschlecht=f
herkunft=Berlin
plz=Keine Angaben
tag=07
monat=12
jahr=1999
status=Schülerin/Schüler
motto=mottotestdb
ns=
autentifiziert=false

so nun zum problem, wie lese ich die zeilen zb hinter nickname= aus?
komme einfach nicht weiter... hier mal die sourcecodes:

Java:
    public void loadFromZip()
    {
        try
        {
            System.out.println("Registrierte Benutzer werden geladen");
            users.clear();
            File file = new File("db");
            String as[] = file.list();
            for(int i = 0; i < as.length; i++)
                try
                {
                    FileInputStream fileinputstream = new FileInputStream("db/" + as[i]);
                    DataInputStream datainputstream = new DataInputStream(fileinputstream);
                    String s = "";
                    for(String s1 = ""; (s1 = datainputstream.readLine()) != null;)
                        s = s + s1;

                    String as1[] = (String[])readNext(s);
                        users.put(as1[0].toLowerCase(), as1);
                    fileinputstream.close();
                }
                catch(Exception exception1) { }

            Registry _tmp = this;
            ChatServer.readuser = "0";
        }
        catch(Exception exception) { }
    }

und dann noch der rest...

Java:
    public Object readNext(String s)
    {
        String as[] = new String[22];
        int i = 0;
        for(; s.indexOf("\263") != -1; s = s.substring(s.indexOf("\263") + 1, s.length()))
        {
            if(i >= 22)
                break;
            as[i] = s.substring(0, s.indexOf("\263"));
            i++;
        }

Java:
                            s =("nickname=" + as[0]);
                            s1 =("passwort=" + as[1]);
                            s2 =("alter=" + as[2]);
                            s3 =("level=" + as[3]);
                            s4 =("onlinezeit=" + as[4]);
                            s5 =("color=" + as[5]);
                            s6 =("lastlogin=" + as[6]);
                            s7 =("picurl=" + as[7]);
                            s8 =("freunde=" + as[8]);
                            s9 =("email=" + as[9]);
                            s10 =("homepage=" + as[10]);
                            s11 =("null=" + as[11]);
                            s12 =("geschlecht=" + as[12]);
                            s13 =("herkunft=" + as[13]);
                            s14 =("plz=" + as[14]);
                            s15 =("tag=" + as[15]);
                            s16 =("monat=" + as[16]);
                            s17 =("jahr=" + as[17]);
                            s18 =("status=" + as[18]);
                            s19 =("motto=" + as[19]);
                            s20 =("ns=" + as[20]);
                            s21 =("autentifiziert=" + as[21]);
in diesem format schreibe ich in die user.txt, wie oben zu sehen der auszug. Nur das auslesen macht mir probleme..!!!

registrieren funktioniert jetz zwar, aber der login nicht... und Userprofile sind auch nicht erreichbar bitte gebt mir ein rat.
 
was ist denn neu sauber formuliert aktuell konkret die Frage?
alles nachzulesen ist ja ganz schon aufwendig,

und ein Gedanke zumindest vorweg:
wenn du dich mit bestimmten Grundsatzproblemen, wie das Wiederfinden einer bestimmten Information beschäftigt,
dann reichen auch möglichst einfache Testprogramma/-daten/-szenarien,
du kannst die meisten Probleme sicher genauso mit drei Zeilen
Java:
                            s =("nickname=" + as[0]);
                            s1 =("passwort=" + as[1]);
                            s2 =("alter=" + as[2]);
klären wie mit 1000 Zeilen
Java:
                            s =("nickname=" + as[0]);
                            s1 =("passwort=" + as[1]);
                            s2 =("alter=" + as[2]);
                            s3 =("level=" + as[3]);
                            s4 =("onlinezeit=" + as[4]);
                            s5 =("color=" + as[5]);
                            s6 =("lastlogin=" + as[6]);
                            s7 =("picurl=" + as[7]);
                            s8 =("freunde=" + as[8]);
                            s9 =("email=" + as[9]);
                            s10 =("homepage=" + as[10]);
                            s11 =("null=" + as[11]);
                            s12 =("geschlecht=" + as[12]);
                            s13 =("herkunft=" + as[13]);
                            s14 =("plz=" + as[14]);
                            s15 =("tag=" + as[15]);
                            s16 =("monat=" + as[16]);
                            s17 =("jahr=" + as[17]);
                            s18 =("status=" + as[18]);
                            s19 =("motto=" + as[19]);
                            s20 =("ns=" + as[20]);
                            s21 =("autentifiziert=" + as[21]);
mit dem Unterschied das die letztere Variante alles ewig komplizierter und unverständlicher macht,
schlimmstenfalls muss man auch noch viele Testdaten eintippen usw.
 
die frage ist, wie lese ich die daten hinter = aus


also zb s.indexof("nickname="); und den ausgelesenen namen hinter dem = im arbeitsspeicher sichern oder auch direkt zugriff auf die datei. wobei ich den RAM speicher bevorzuge.

Mfg Alex🙂
 
String.split("=") würde 2 Teile liefern von denen du den 2. nehmen könntest.

Aber irgendwie finde ich das Konzept nicht durchdacht. Für sowas nimmt man eine Datenbank, es gibt da recht simple Sachen wie H2 und dann sowas wie Hibernate.
 
mit dem Index von s.indexof("nickname="); + Länge des gesuchten Strings, hier "nickname=", erhält man genau den Index hinter dem Gleichheitszeichen,
+-1, immer alles intensiv ausprobieren, testen wenn dahinter/ davor nix steht, Suchbegriff nicht gefunden wird usw. usf.

besonders wichtig ist in einem solchen Fall, nicht "nickname=" zweimal im Code stehen zu haben,
Variablen anlegen, evtl. Methode mit Parameter usw.
 
mit dem Index von s.indexof("nickname="); + Länge des gesuchten Strings, hier "nickname=", erhält man genau den Index hinter dem Gleichheitszeichen,
+-1, immer alles intensiv ausprobieren, testen wenn dahinter/ davor nix steht, Suchbegriff nicht gefunden wird usw. usf.

besonders wichtig ist in einem solchen Fall, nicht "nickname=" zweimal im Code stehen zu haben,
Variablen anlegen, evtl. Methode mit Parameter usw.

klingt zwar alles schön und gut, aber wie es aussieht muss ich das komplette system umschreiben oder kann ich die variablen as[1],as[2] weiterverwenden??

mfg alex
 
selbst wenn ich den Code exakt kennen würde ist das eine übertrieben allgemeine Frage,
man muss immer vieles ändern..
 

Zurück
Oben