String-Adresse anstatt String-Inhalt wird ausgegeben

dastool

Erfahrenes Mitglied
Guten Abend Java-Gemeinde,

ich hab mal wieder ( :rolleyes:) einen hänger.
Unser Dozent gab uns einen Code für das "einfache" Lesen und Schreiben von Dateien.
Was auch funktioniert.
Ich hab nun den Code für meine bedürnisse anpassen wollen.
Nun tritt dort das folgende Problem auf:

Die Datei, in die ich schriben möchte existiert, und heisst schlicht "artikel".
Sobald ich eine Eingabe machte, wird diese gerpüft etc. alles astrein und so, wie ich das möchte.
Nur die gespeicherte Eingabe ist nicht, wie im Test, das Wort "Test", sondern [Ljava.lang.String;@82ba41

Ob ihr nun den Code braucht, oder nicht ist relativ, ich häng ihn sicherheitshalber mal an (2 Klassen. Main und EasyZugriff).

Klasse Main.java:
Code:
package EasyBuy;
import java.io.*;
import java.awt.Dimension;

public class Main {

    
    public static void main(String[] args)
    throws FileNotFoundException, IOException
    {
        EasyZugriff zugriff = new EasyZugriff();
        
        BufferedReader inDatei = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("dateiname: ");
        String sDatei = inDatei.readLine();
        
        BufferedReader inEingabe = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Eingabe machen: ");
        String sEingabe = inEingabe.readLine();
        
        zugriff.schreiben(sDatei, sEingabe);
        String dlesen = zugriff.lesen(sDatei);
        
        System.out.print(dlesen);
    }
    
}

Klasse EasyZugriff
Code:
package EasyBuy;
import java.io.*;
import java.util.*;

public class EasyZugriff {
    public void schreiben(String dateiname, String eingabe)
    throws IOException, FileNotFoundException {
        boolean b;
        b = dateiInhaltPruefen(dateiname, eingabe);
        if(b == false)// wort nicht in datei enthalten
        {
            eingabe = dateiInhaltBearbeiten(dateiname, eingabe);
            PrintWriter out;
            out = new PrintWriter(new FileWriter(dateiname));
            out.print(eingabe);
            out.close();
            
        }
        
    }
    
    
    private boolean dateiInhaltPruefen(String dateiname, String eingabe) // Eingabe mit Inhalt vergleichen
    throws IOException, FileNotFoundException {
        boolean b = true;
        String input = "";
        input = dateiInhaltLesen(dateiname, eingabe);
        b = dateiInhaltVergleichen(eingabe, input);
        if( b == true) {
            b = true; //wort in datei enthalten
        } else {
            b = false;//wort nicht in datei enthalten
        }
        
        return b;
    }
    
    private String dateInhaltSortieren(String eingabe, String input)
    throws IOException, FileNotFoundException {
        String[] strarray = new String[] { eingabe };
        Arrays.sort(strarray);
        eingabe = strarray.toString();
        eingabe = eingabe.concat("\n"+input);
        return eingabe;
    }
    
    private void dateiInhaltLoeschen(String dateiname)
    throws IOException {
        boolean a,b;
        File f = new File(dateiname);
        a = f.delete();
        b = f.createNewFile();
    }
    
    private boolean dateiInhaltVergleichen(String eingabe, String input) {
        boolean b;
        if(!(eingabe.equals(input))) {
            b = false;
        } else {
            b = true;
        }
        
        return b;
    }
    
    public static String dateiInhaltLesen(String dateiname, String eingabe)
    throws FileNotFoundException, IOException {
        BufferedReader in = new BufferedReader(new FileReader(dateiname));
        String line, inputstr = "";
        line = in.readLine();
        while (line != null) {
            inputstr = inputstr.concat(line+"\n");
            line = in.readLine();
        }
        System.out.print(inputstr);
        in.close();
        return inputstr;
    }
    
    public String dateiInhaltBearbeiten(String dateiname, String eingabe)
    throws IOException, FileNotFoundException {
        String input = "";
        input = dateiInhaltLesen(dateiname, eingabe);
        dateiInhaltLoeschen(dateiname);
        input = dateInhaltSortieren(eingabe, input);
        return input;
    }
    
    public static String lesen(String dateiname)
    throws FileNotFoundException, IOException
    {
        BufferedReader in = new BufferedReader(new FileReader(dateiname));
        String line, inputstr = "";
        line = in.readLine();
        while (line != null)
        {
            inputstr = inputstr.concat(line+"\n");
            line = in.readLine();
        }
        System.out.print(inputstr);
        in.close();
        return inputstr;
    }

    
    
}

Ich weiss, dass ich irgendwo einen kleinen Fehler drin hab, aber ich such mir hier seid Stunden nen Ast und komm auf keinen grünen Zweig :mad:.

Ich hoff, mindestens einer kann mir helfen :)

gruss

Martin
 
Hallo Martin,

String[] strarray = new String[] { eingabe };
Arrays.sort(strarray);
eingabe = strarray.toString();

in den obigen Zeilen ist zumindest ein Fehler. Man kann nicht einen Array hier strarray einfach in einen String umwandeln mit toString(). Wenn das Array nur ein Element enthält einfach "eingabe = strarray[0];" , wenn es mehrere sind, mit einer Schleife durchlaufen und zusammenhängen und dann erst in eingabe speichern.

Vg Erdal
 
Hallo Martin,

nochwas. Ich nutze als Java IDE eclipse. Dieser und bestimmt auch viele andere Editoren besitzen einen DEBUG-Modus, mit der du dein Programm Zeile für Zeile durchlaufen und dabei die Veränderungen an den Variablen verfolgen kannst. Genauso habe ich das hier auch gemacht. Bin Zeile für Zeile dem Debugger gefolgt bis aus dem String "Test" irgendetwas komisches wurde. Statt stundenlang Fehlersuchen das nächstes mal einen Debugger verwenden!

Vg Erdal
 
Böser Fehler meinerseits...
Aber leider löst das nicht mein Problem. :(


//edit:

Dann muss ich das mal in dem NetBeans versuchen (Hab kein Eclips zur Hand)
 
Zuletzt bearbeitet:
Gute Nacht Martin,

wo ist das Problem? Ich habe in deinem Code folgende Zeile

eingabe = strarray.toString();

mit

eingabe = strarray[0];

ersetzt.

Siehe da in die angegebene Datei wird der angegebene String geschrieben und auch in der Konsole ausgegeben. Soweit funktioniert der Code nach dieser Änderung.

Vg Erdal
 
Ich sollte wohl doch eher meine Grippe auskurieren, als an dem Projekt arbeiten:rolleyes:

Hat perfekt geklappt.
Danke
 
Zurück