Zeilenweises auslesen aus einer Datei über Server

Hallo,

ich möchte gern aus einer Textdatei jede Zeile einzeln auslesen und das soll über nen Server laufen.
Momentan sieht mein Server wie folgt aus:

Server:
Code:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;

public class Server
{
  public static void main(String[] args)
  {
    try
    {
      //Server starten
      ServerSocket server = new ServerSocket(1234);

      while(true)
      {
        //warte auf Verbindung
        System.out.println("Warte auf Verbindung.");
        Socket s = server.accept();
        System.out.println("Verbunden.");

        (new ServerThread(s)).start();
      }

    }

    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
}

class ServerThread extends Thread
{
  Socket s;
  Socket c;

  public ServerThread(Socket s) throws Exception
  {
    this.s = s;
    runServer();
  }
  
  void runServer()
  {
    try
    {
      c = s;
      System.out.println("Verbunden");
      System.out.println("Verbunden mit: " + c.getInetAddress() + " Port: " + c.getPort());
      lesen(c);
    }

    catch(Exception e)
    {
      System.out.println("Server error");
    }
  }
  
  void lesen(Socket c)
  {
    try
    {
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      String text = in.readLine();
      String [] messagesplit = text.split("§");
      String befehl = messagesplit[0];
      String nachricht = messagesplit[1];
      String befehlanlegen = "anlegen";
      String befehlanzeigen = "anzeigen";
      String befehlsuchen = "suchen";
      
      if (befehl.equals(befehlanlegen))
      {
        System.out.println("1");
        System.out.println("Befehl: " + befehl);
        System.out.println("Nachricht empfangen: " + nachricht);
        BufferedWriter outspeichern = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Prüfpläne.txt", true)));
        outspeichern.write(nachricht);
        outspeichern.newLine();
        outspeichern.flush();
        System.out.println("Empfange Nachricht wurde erfolgreich in die Datei 'Prüfpläne.txt' geschrieben.");
        outspeichern.close();
      }

      else if (befehl.equals(befehlanzeigen))
      {
        System.out.println("2");
        System.out.println("Befehl: " + befehl);
        BufferedReader inlesen = new BufferedReader(new InputStreamReader(new FileInputStream("Prüfpläne.txt")));

        String strAnzeigenLine;
        String Test = inlesen.readLine();
        for (int i = 0; i >= 3; i++)
        {
          while((strAnzeigenLine = inlesen.readLine()) != null)
          {
            strAnzeigenLine = inlesen.readLine();
            System.out.println(strAnzeigenLine);
            //AnzeigenTabelle.addRow(AnzeigenSplit);
          }
        }
        //String Ausgelesen = inlesen.readLine();
        //System.out.println(Ausgelesen);
      }
      
      else if (befehl.equals(befehlsuchen))
      {
        System.out.println("3");
        System.out.println("Befehl: " + befehl);
        System.out.println("Nachricht empfangen: " + nachricht);
        BufferedWriter outsuchen = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        outsuchen.write(nachricht);
        outsuchen.newLine();
        outsuchen.flush();
        System.out.println("Nachricht zurückgesendet.");
        outsuchen.close();
      }
    }
    
    catch(IOException io)
    {
      io.printStackTrace();
    }
  }
}

und der Client so:
Code:
package anzeigen;                                                                                        //Paket erstellen

import java.awt.*;                                                                                       //importieren von Paketen und Klassen
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public class Prüfpläneanzeigen extends JFrame                                                            //Klasse Prüfpläneanzeigen erbt von Oberklasse JFrame
{
  private String[] Spaltennamen = {"Getriebetyp", "Nummer", "Art", "Dokumentiert", "Prüfmittel", "Messbereich", "Prüfablauf", "Prüfergebnis"};    //Deklaration eines Strings
  private DefaultTableModel AnzeigenTabelle;                                                             //Deklaration eines Tabellenmodels
  private JComponent contentPane = (JComponent) getContentPane();                                        //Deklaration von JComponent für Ereignisabfrage

  Prüfpläneanzeigen()                                                                                    //Methode Prüfpläneanzeigen
  {
    super("Alle Prüfpläne anzeigen");                                                                    //Titelleiste wird als Alle Prüfpläne anzeigen bezeichnet
    AnzeigenLayout();                                                                                    //Methode AnzeigenLayout aufrufen
    ClientThreadanzeigen ctanzeigen = new ClientThreadanzeigen();
    readTable();                                                                                         //Methode readTable aufrufen
  }

  void AnzeigenLayout()                                                                                  //Methode AnzeigenLayout
  {
    contentPane.setLayout(new BorderLayout());                                                           //Variable contentPane wird der BorderLayout zugewiesen

    createAnzeigenMenuleiste();                                                                          //Methode createMenuleiste aufrufen

    AnzeigenTabelle = new DefaultTableModel(null, Spaltennamen);                                         //neues Tabellenmodel wird erstellt
    JTable tblAnzeigen = new JTable(AnzeigenTabelle);                                                    //neue Tabelle wird erstellt
    tblAnzeigen.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);                                       //passt die Größe der Spalten an

    JScrollPane scrollPane = new JScrollPane(tblAnzeigen);                                               //Scrollleiste erstellen
    scrollPane.setPreferredSize(new Dimension(785, 500));                                                //Größe der Tabelle festlegen

    JPanel panelAnzeigenTable = new JPanel();                                                            //JPanel erzeugen
    panelAnzeigenTable.add("Center", scrollPane);                                                        //Scrollleiste Tabelle zuweisen
    contentPane.add("West", panelAnzeigenTable);                                                         //JPanel auf Fenster ablegen

    JButton btnAnzeigenOK = new JButton("OK");                                                           //JButton erzeugen
    btnAnzeigenOK.addActionListener(new ActionListener()                                                 //JButton Aktion zuweisen
    {
      public void actionPerformed(ActionEvent e)
      {
        closeAnzeigenWindow();                                                                           //Methode closeAnzeigenWindow aufrufen
      }
    });

    JPanel panelAnzeigenButton = new JPanel();                                                           //JPanel erzeugen
    panelAnzeigenButton.add(btnAnzeigenOK);                                                              //JButton JPanel zuweisen
    contentPane.add("South", panelAnzeigenButton);                                                       //JPanel auf Fenster ablegen
  }

  private void createAnzeigenMenuleiste()                                                                //Methode createAnzeigenMenuleiste
  {
    JMenuBar Anzeigenleiste = new JMenuBar();                                                            //Menuleiste erzeugen
    JMenu AnzeigenProgramm = new JMenu("Programm");                                                      //Menu "Programm" erzeugen

    JMenuItem AnzeigenEnde = new JMenuItem("Beenden");                                                   //Menupunkt "Beenden" erzeugen

    AnzeigenProgramm.add(AnzeigenEnde);                                                                  //Menupunkt Menu zuweisen
    
    AnzeigenEnde.addActionListener(new ActionListener()                                                  //Menupunkt Aktion zuweisen
    {
      public void actionPerformed(ActionEvent e)
      {
        closeAnzeigenProgramm();                                                                         //Methode closeAnzeigenProgramm aufrufen
      }
    });

    Anzeigenleiste.add(AnzeigenProgramm);                                                                //Menu Menuleiste zuweisen
    setJMenuBar(Anzeigenleiste);                                                                         //Menuleiste wird auf Fenster abgelegt
  }
  
  void closeAnzeigenProgramm()                                                                           //Methode closeAnzeigenProgramm
  {
    System.exit(0);                                                                                      //schließt das komplette Programm
  }

  void closeAnzeigenWindow()                                                                             //Methode closeAnzeigenWindow
  {
    this.setVisible(false);                                                                              //schließt das Fenster "Alle Prüfpläne anzeigen"
  }

  protected void readTable()                                                                             //Methode readTable
  {
    try
    {
      BufferedReader Anzeigenreader = new BufferedReader(new FileReader("Prüfpläne.txt"));               //auslesen aus Textdatei

      String strAnzeigenLine;
      String Test = Anzeigenreader.readLine();                                                                            //String deklarieren
      while((strAnzeigenLine = Anzeigenreader.readLine()) != null)                                       //while-Schleife beginnen
      {
        String[] AnzeigenSplit = strAnzeigenLine.split(";");                                             //Text wird bis zum Semikolen abgeschnitten
        AnzeigenTabelle.addRow(AnzeigenSplit);                                                           //abgeschnittener Text an Tabelle übergeben
      }
      AnzeigenTabelle.fireTableDataChanged();
      JOptionPane.showMessageDialog(null, "Die Datenbank enthält zurzeit " + AnzeigenTabelle.getRowCount() + " Datensätze.", "Information", JOptionPane.INFORMATION_MESSAGE);
    }

    catch(FileNotFoundException e)
    {
      JOptionPane.showMessageDialog(null, "Datei 'Prüfpläne.txt' wurde nicht gefunden.", "Fehlermeldung", JOptionPane.ERROR_MESSAGE);
    }

    catch(IOException e)
    {
      JOptionPane.showMessageDialog(null, "Sie besitzen keinen Lesezugriff auf die Datei 'Prüfpläne.txt'.", "Information", JOptionPane.INFORMATION_MESSAGE);
    }
  }

  public static void Prfanzeigen()                                                                       //Methode Anzeigen
  {
    Prüfpläneanzeigen Anzeigen = new Prüfpläneanzeigen();                                                //Prüfpläneanzeigen erzeugen
    Anzeigen.setLocation(100, 100);                                                                      //Fenster um 100 Pixel nach rechts und 100 nach unten versetzt
    Anzeigen.setSize(800, 600);                                                                          //Fenstergröße
    Anzeigen.setResizable(false);                                                                        //Fenstergröße nicht veränderbar
    Anzeigen.setVisible(true);                                                                           //Fenster anzeigen
  }
}

class ClientThreadanzeigen extends Thread
{
   ClientThreadanzeigen()
   {
    senden();
   }

  public void senden()
  { try
    {
      //Socket auf Lokalhost Port 1234 konstruieren
      Socket s = new Socket("localhost", 1234);

      //etwas über den Socket versenden
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      String anzeigen = "anzeigen§ ";
      out.write(anzeigen);
      System.out.println("Sende '" + anzeigen + "' an Server Port 1234.");

      //Zeilenumbruch senden
      out.newLine();
      out.flush();

      //Writer schließen
      out.close();

      System.out.println("Beendet.");
    }

    catch (FileNotFoundException e)
    {
      e.printStackTrace();
    }

    catch (IOException io)
    {
      io.printStackTrace();
    }
    }
}

Leider wird mir immer nur eine Zeile ausgegeben, mehr nicht. Woran liegt das?

Vielen Dank.
 
Hallo,

im Server steht folgender Code:

Code:
while((strAnzeigenLine = inlesen.readLine()) != null)
{
      strAnzeigenLine = inlesen.readLine();
      System.out.println(strAnzeigenLine);
}

mit der Anweisung im Kopf der Schleife wird schon ein Wert eingelesen und in strAnzeigenLine gespeichert. Wenn danach die nächste Zeile gelesen und gespeichert wird, wird nur jede zweite ausgegeben. Dass nur die letzte Zeile ausgegeben wird, könnte vielleicht daran liegen, dass die Datei nur zwei Zeilen hat und die erste übersprungen wird. Versuch stattdessen einfach:

Code:
while((strAnzeigenLilne = inlesen.readLine()) != null)
{
      System.out.println(strAnzeigenLine);
}
 
Zurück