Problem beim Einlesen einer Textdatei

Fetzi

Mitglied
Guten Abend alle zusammen,

ich steuer über TCP/IP einen KUKA Roboter an und setze über Netzwerk Variablen, damit er seinen Position ändert. Wenn ich diese manuell eingeben läuft alles super. Sobald ich die Variablen jedoch aus einer Textdatei lesen will stellt sich mein Programm quer.
Java:
package no.hials;

import java.io.IOException;
import java.util.Scanner;
import no.hials.crosscom.CrossComClient;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class Anfahren {
  public static void main(String[] args) throws IOException {
     String[] test = {"172.19.11.46","7000"};
             if (test.length != 2) {
            System.out.println("Error! Both IP and port must be provided as input arguments!");
            System.out.println("Terminating..");
            System.exit(1);
        }

        String address = test[0];
        int port = -1;
        try {
            port = Integer.parseInt(test[1]);
        } catch (NumberFormatException ex) {
            System.out.println("Error on parsing port number! Tried to convert '" + test[1] + "' to int..");
            System.out.println("Terminating..");
            System.exit(1);
        }

        CrossComClient client = null;
        try {
            client = new CrossComClient(address, port);
        } catch (IOException ex) {
            System.out.println(ex);
            System.out.println("Terminating..");
            System.exit(1);
        }
 
 
    Scanner sc = new Scanner(System.in);
    String[] punkte;
 
    System.out.println("Manuelle Eingabe (0)");
    System.out.println("Einlesen einer Textdatei (1)");
    int manual = 1;//Integer.parseInt(sc.nextLine().trim());
 
    if (manual == 0) {
      System.out.println("Wie viele Punkte zur Kalibrierung sollen angefahren werden?");
      punkte = new String[Integer.parseInt(sc.nextLine().trim())];
      for (int i = 1;i <= punkte.length ;i++ ) {
        System.out.println("Geben sie den " + i +"ten Kalibrierungspunkt an");
        punkte[i-1] = sc.nextLine().trim();
    } // end of for
    } else {
      System.out.println("Name der Textdatei angeben (Bsp: test.txt)");
      punkte = ladeDatei(sc.nextLine().trim());                                                                   
    } // end of if-else
 
    for (int i = 0;i <punkte.length ;i++ ) {
      System.out.println(punkte[i]);
    } // end of for
 
 
 
    System.out.println("Wie viele Sekunden soll zwischen den Punkten gewartet werden?");
    int wait =  Integer.parseInt(sc.nextLine().trim());
 
    for (int i = 0;i <punkte.length ;i++ ) {
      client.simpleWrite("MYPOS", punkte[i]);
      try        {
        Thread.sleep(wait*1000);
      }
      catch(InterruptedException ex) {
        Thread.currentThread().interrupt();
        }
    } // end of for
  } // end of main
   public static String[] ladeDatei(String datName) {

    File file = new File(datName);
    List<String> list = new ArrayList<String>();
 
 
    if (!file.canRead() || !file.isFile()) {
      System.exit(0);
    } else {
      BufferedReader in = null;
        try {
        in = new BufferedReader(new FileReader(datName));
        String zeile = null;
            while ((zeile = in.readLine()) != null) {
            list.add(zeile);
            }
        } catch (IOException e) {
        e.printStackTrace();
        } finally {
            if (in != null)
            try {
            in.close();
            } catch (IOException e) {
              }
        }
    } // end of if-else
 
    return list.toArray(new String[0]);
    }
}  // end of class Anfahren

Die Methode "ladeDatei" liest die Datei aus und returned mir einen String.
Wenn ich den Verbindungsteil entferne läuft das Programm auch. Hier mal in "test3" festgehalten.

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
import java.util.Scanner;

public class test3 {
 
  public static void main(String[] args) throws IOException {
    Scanner sc = new Scanner(System.in);
    String[] punkte;
  
    System.out.println("Manuelle Eingabe (0)");
    System.out.println("Einlesen einer Textdatei (1)");
    int manual = Integer.parseInt(sc.nextLine().trim());
  
    if (manual == 0) {
      System.out.println("Wie viele Punkte zur Kalibrierung sollen angefahren werden?");
      punkte = new String[Integer.parseInt(sc.nextLine().trim())];
      for (int i = 1;i <= punkte.length ;i++ ) {
        System.out.println("Geben sie den " + i +"ten Kalibrierungspunkt an");
        punkte[i-1] = sc.nextLine().trim();
    } // end of for
    } else {
      System.out.println("Name der Textdatei angeben (Bsp: test.txt)");
      punkte = ladeDatei(sc.nextLine().trim());                                                                   
    } // end of if-else
  
    for (int i = 0;i <punkte.length ;i++ ) {
      System.out.println(punkte[i]);
    } // end of for
  
  } // end of main
 
   private static String[] ladeDatei(String datName) {

    File file = new File(datName);
    List<String> list = new ArrayList<String>();
  
  
    if (!file.canRead() || !file.isFile()) {
      System.exit(0);
    } else {
      BufferedReader in = null;
        try {
        in = new BufferedReader(new FileReader(datName));
        String zeile = null;
            while ((zeile = in.readLine()) != null) {
            list.add(zeile);
            }
        } catch (IOException e) {
        e.printStackTrace();
        } finally {
            if (in != null)
            try {
            in.close();
            } catch (IOException e) {
              }
        }
    } // end of if-else
  
    return list.toArray(new String[0]);
    }
} // end of class test3


Interessant ist auch, dass das Programm läuft wenn ich einen Haltepunkt vor "return list.toArray(new String[0])" setze.
In der Konsole steht dann: "Listening for transport dt_shmem at adress:jdbconn"

Meine Erfahrung ist leider unzureichend um das Problem festzumachen. Ich hoffe Ihr könnt mir weiterhelfen


Vielen Dank schonmal!
 
Zuletzt bearbeitet:
Es ist schwierig daran festzumachen woran es liegen könnte aber ich würde auch erst eine Verbindung aufbauen, wenn ich die Datei gelesen habe und nicht wie du vorher schon.
 
Ich habe es soweit festgemacht, dass es an "package no.hials;" liegt.
Auch wenn ich nichts aus dem Paket verwende funktioniert auch test3 nichtmehr sobald ich es einbinde.

Ich habe das Einlesen testweise etwas vereinfacht:
Code:
String datName = sc.nextLine().trim();
   
      List<String> list = new ArrayList<String>();
   
      FileReader fr = new FileReader(datName);
      BufferedReader br = new BufferedReader(fr);
   
      String zeile = "";
   
      while( (zeile = br.readLine()) != null )
      {
        list.add(zeile);
      }
   
      br.close();
Wenn ich das Ganze jetzt ausführe mit "package no.hials", dann bekomme ich folgende Fehlermeldung:
https://picload.org/view/drdwrpll/unbenannt.png.html
unbenannt.png.html
 
FileNotFoundException .. dein File unter dem angegebenen Pfad nicht gefunden.
Wie sieht datName denn aus? Wo liegt dein File?
 
Verwende einfach mal:

Java:
J
        JFileChooser fj = new JFileChooser();
        fj.showOpenDialog(null);

        File selectedFile = fj.getSelectedFile();
        System.out.println(selectedFile);

um die Dateien auszuwählen.
 
Also erstmal Danke für die Hilfe.
Mein Problem habe ich wie gesagt bereits gelöst. Binde ich das package ein kann ich nichtmehr einfach "test.txt" eingeben sondern muss "/no/hials/test.txt" nutzen.


Moin,

und warum willst Du es einbinden, wenn Du es eh' nicht benutzt ?? 😵

VG Klaus
Das war auf test3 bezogen in meiner richtigen Anwendungen brauche ich es natürlich
 
Was geht denn nun und was geht nicht ? Das laden der Punkte aus der Datei funktioniert also ? Und diese Punkte sind inhaltlich korrekt ? Aber dein Roboter kommt nicht damit zurecht wenn du sie aus der Datei lädtst ?

Edit: ah ok. Also alles geht jetzt ?
 

Neue Themen


Zurück
Oben