Ergänzend in Datei schreiben.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ergänzend in Datei schreiben.

    Ich habe eine Applikation in Java geschrieben. Die Applikation soll eine Datei öffnen, und er gänzlich etwas "hinten" bzw "unten" rann schreiben. Der Compiler gibt folgende Fehlermeldung aus:

    Quellcode

    1. store.java:25: ']' expected
    2. String lastCnt[i] = DatBuffer.readLine();
    3. ^
    4. 1 error


    Mein Code:

    Quellcode

    1. import java.lang.*;
    2. import java.io.*;
    3. import java.util.Scanner;
    4. public class store
    5. {
    6. public static void main(String[] args)
    7. throws IOException
    8. {
    9. //Init
    10. Scanner sc = new Scanner(System.in); //Scanner for INPUT
    11. String cat; //categorie
    12. String content; //content
    13. //String[] lastCnt;
    14. String tmpCnt;
    15. //File stream READ
    16. FileReader DatReader = new FileReader("database.db");
    17. BufferedReader DatBuffer = new BufferedReader(DatReader);
    18. for(int i = 0;i > -1;i++){
    19. tmpCnt = DatBuffer.readLine();
    20. if(tmpCnt == null ){
    21. break;
    22. }
    23. String lastCnt[i] = DatBuffer.readLine();
    24. System.out.println("Read:"+lastCnt[i]);
    25. }
    26. DatBuffer.close();
    27. //File stream PRINT/WRITE
    28. FileWriter DatStream = new FileWriter("database.db"); //File stream
    29. PrintWriter DatPrinter = new PrintWriter(DatStream); //File printer
    30. //Input
    31. System.out.print("Type in your categorie: "); //Output
    32. cat = sc.next(); //Inserts categorie
    33. System.out.println(); //New line
    34. System.out.print("Type in your content: "); //Output
    35. content = sc.next(); //Inserts content
    36. System.out.println(); //New line
    37. //Print file
    38. for(int n = 0;n <= lastCnt.length;n++){
    39. DatPrinter.println(lastCnt[n]);
    40. }
    41. DatPrinter.println(cat+":"+content);
    42. DatPrinter.close();
    43. System.out.println("End.");
    44. System.out.println("Written down:"+cat+":"+content);
    45. }
    46. }
    Alles anzeigen


    Vielleicht sind noch einige Fehler im Code, aber das ist nebensächlich. Was ist hier das Problem? Meiner Meinung nach ist das was der Compiler sagt "unlogisch". Bitte um Hilfe!
  • Also fangen wir mal an.

    Wie vorher schon erwähnt, kann das so nicht funktionieren.
    Entweder du erstellst ein Array fester größe (nicht sinnvoll, da dir das Programm um die Ohren fliegt, sobald mal mehr Zeilen gelesen werden)
    oder du benutz einen Datentyp, der dynamisch seine Größe ändert.
    Würde Vector oder ne Liste empfehlen

    So jetzt ein paar Dinge zu deinem Programmierstil.

    1. Fang erst gar nicht damit an, alles in der Main-Methode zu machen. Schlechter Stil, wenn nicht sogar sehr sehr ... schlechter Stil

    2. Es ist zwar ganz nett, dass du zuerst nen FileReaer erstellst und dann den BufferedReader. Sinnvoller wäre aber erst mal ein File-Objekt zu erstellen

    Quellcode

    1. File datei = new File("database.db");
    2. BufferedReader reader = new BufferedReader(new FileReader(datei));

    selbes Spielchen auch beim Writer.
    Persönlich würde ich

    Quellcode

    1. BufferedWriter writer = new BufferedWriter(new FileWriter(file));

    verwende

    3. womit wir beim nächsten Punkt wären
    Variablen sollten NICHT mit einem Großbuchstaben beginnen
    also NICHT "DatReader", sondern "datReader"

    4. Deine Schleife mit der du durch die Datei läuftst ist weder optimal noch funktioniert sie, so wie du es haben willst (es wird nur jede zweite Zeile berücksichtigt). Wenn man eine For-Schleife mit einer if-Anweisung beendet, sollte man besser eine while-Schleife einsetzen

    Quellcode

    1. while((tmpCnt = DatBuffer.readLine()) != null){
    2. ...
    3. }
  • Hab das Problem gelöst, es ist aber ein neues Problem entstanden: Der Compiler findet die main Methode nicht.

    Quellcode

    1. import java.lang.*;
    2. import java.io.*;
    3. import java.util.Scanner;
    4. public class store
    5. {
    6. public static void main(String[] args)
    7. throws IOException
    8. {
    9. //Init
    10. Scanner sc = new Scanner(System.in); //Scanner for INPUT
    11. String cat; //categorie
    12. String content; //content
    13. String lastCnt;
    14. String tmpCnt;
    15. //File stream READ
    16. FileReader DatReader = new FileReader("database.db");
    17. BufferedReader DatBuffer = new BufferedReader(DatReader);
    18. DatBuffer.close();
    19. //File stream PRINT/WRITE
    20. FileWriter DatStream = new FileWriter("database.db"); //File stream
    21. PrintWriter DatPrinter = new PrintWriter(DatStream); //File printer
    22. //Input
    23. System.out.print("Type in your categorie: "); //Output
    24. cat = sc.next(); //Inserts categorie
    25. System.out.println(); //New line
    26. System.out.print("Type in your content: "); //Output
    27. content = sc.next(); //Inserts content
    28. System.out.println(); //New line
    29. //Print file
    30. /*for(int n = 0;n <= lastCnt.length;n++){
    31. DatPrinter.println(lastCnt[n]);
    32. }*/
    33. while(true){
    34. tmpCnt = DatBuffer.readLine();
    35. if(tmpCnt == null ){
    36. break;
    37. }
    38. DatPrinter.println(tmpCnt);
    39. }
    40. DatBuffer.close();
    41. DatPrinter.println(cat+":"+content);
    42. DatPrinter.close();
    43. System.out.println("End.");
    44. System.out.println("Written down:"+cat+":"+content);
    45. }
    46. }
    Alles anzeigen
  • Dein Programm läuft
    Hast es wahrscheinlich nur falsch Aufgerufen.
    Was für ein Fehler kommt denn genau.

    Übrigens bevor ich es vergesse:
    import java.lang.*;
    ist überflüssig

    und
    Klassennamen schreibt man groß

    P.S.
    gerade gesehen
    FileWriter(String fileName, boolean append)
    Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.

    Quellcode

    1. FileWriter writer = new FileWirter("datenbank.db", true);


    ;)
  • java.lang*
    wird so oder so importiert
    das braucht man nicht extra zu includen

    Es wäre nett, wenn du mal posten könntest, was für ne Fehlermeldung kommt, da dein Code bei mir "funktioniert"
    bzw die Main-Methode

    musst immer etwas drauf achten, von welcher Stelle du das Programm startest.
    Das ist nämlich nicht egal