# Zeilenweises auslesen aus einer Datei über Server



## Jack Bauer (9. Jun 2007)

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:

```
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:

```
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.


----------



## Guest (9. Jun 2007)

Wie soll man den Client ohne main methode starten??
 ???:L


----------



## Guest (9. Jun 2007)

Wenn du die datei im client einliest, für was brauchst du dann ein server?

Client:

```
BufferedReader Anzeigenreader = new BufferedReader(new FileReader("Prüfpläne.txt"));               //auslesen aus Textdatei
```


----------



## Guest (9. Jun 2007)

hab es mal für dich zusammengemurckst:


```
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;
        for (int i = 0; i >= 3; i++)
        {
          while((strAnzeigenLine = inlesen.readLine()) != null)
          {
            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:
	
	
	
	





```
//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 Prufplaneanzeigen 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

  Prufplaneanzeigen()                                                                                    //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;
      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 main(String[] args)                                                                       //Methode Anzeigen
  {
    Prufplaneanzeigen Anzeigen1 = new Prufplaneanzeigen();                                                //Prüfpläneanzeigen erzeugen
    Anzeigen1.setLocation(100, 100);                                                                      //Fenster um 100 Pixel nach rechts und 100 nach unten versetzt
    Anzeigen1.setSize(800, 600);                                                                          //Fenstergröße
    Anzeigen1.setResizable(false);                                                                        //Fenstergröße nicht veränderbar
    Anzeigen1.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();
    }
    }
}}
```

bei mir ging es so allerdings frag ich mich schon noch warum du die datei im client einliest und im server oder hab ich da was falsch verstanden?? ???:L


----------



## Guest (9. Jun 2007)

das war alles von mir


----------



## anfänger15 (9. Jun 2007)

von mir


----------



## Jack Bauer (18. Jun 2007)

Danke Du hast mir sehr geholfen.


----------

