Parameter-Datei einlesen (zeilenweise); Dateiintegrität

Moch

Bekanntes Mitglied
Hallo Zusammen,

Problem in der kurzen Zusammenfassung:
Ich arbeite seit einigen Monaten an der Programmierung einer Multi-Agentensimulation zur Optimierung von Alarmanlagen-Positonen gegen Einbrecher. Die Simulation und die Optimierung sind bereits soweit fertig implementiert. Möchte man jedoch momentan die Simulationsparameter, so muss dies im Quellcode selbst geschehen.

Ich möchte jedoch nicht, dass die dort eingegebenen Parameter verändert werden, da sie die "default"-Werte der Simulation bilden. Dem User soll die Wahl überlassen sein, ob er mit "default"-Werten oder mit eigenen Parameter arbeiten möchte.
Die entsprechenden Parameter sind hier entweder booleans, doubles oder integer, sowie einem String.

Das Framework, mit welchem ich arbeite, bietet mir aufgrund seines eigenes Interfaces leider keine (mir bekannte) Möglichkeit eine simple Eingabe-GUI oder ein Terminal-Interface zu schreiben.

Daher möchte ich die Paramter zur Laufzeit aus einer Datei auslesen. Genau da stehe ich jetzt vor Problemen und irgendwie komme ich nach Monaten mit dem Kram nicht mehr klar.

1. Konzeptfrage: Habt Ihr einen Tipp für mich, wie ich die Datei selbst prüfen kann?
Mir geht es speziell darum, wie ich damit umgehen soll, wenn der User mit der Parameter-Datei unfug getrieben hat - z.B. versehentlich einen Zeilenumbruch entfernt und damit aus zwei Zeilen eine macht. Dies würde eine entsprechende Methode zum Einlesen natürlich vollständig zum Scheitern verurteilen

2. Konzeptfrage: Habt Ihr vielleicht eine Idee, wie ich das überhaupt verhindern kann?
Sodass der User die Datei vielleicht beim normalen Arbeiten gar nicht kaputt machen kann?

3. Wie lese ich eine Datei Zeilenweise korrekt wieder ein?

Als (vereinfachtes) Beispiel soll eine Datei in etwa so aussehen:
Code:
randomX=true;
randomY=false;
coordX=42;
coordY=25.4;
plan="gebaeudeplan.dat"

Dabei gibt es momentan 16 mögliche Parameter, die verändert werden können. Diese müssen zur Laufzeit korrekt eingelesen werden und natürlich die entsprechenden Werte den richtigen Variablen zugeordnet werden - leider habe ich bisher nur mit Dateiausgaben gearbeitet, wo ich einfach befehlen kann ".newLine();" und gut ist. Hier weiß ich leider nicht, wie ich gezielt auf Zeilen der Datei zugreifen kann.

Liebe Grüße
Moch
 
M

Marcinek

Gast
1. Konzeptfrage: Habt Ihr einen Tipp für mich, wie ich die Datei selbst prüfen kann?

Das geht nicht. Theoretisch ist ja "KoordX=x=y" ja valide

Dann ist der PrameterString nämlich "x=y". Du kannst nur prüfen, ob der Wert hier ein Integer ist oder wenn String, dann per Regular Expressions testen und eben = Zeichen verbieten.

2. Konzeptfrage: Habt Ihr vielleicht eine Idee, wie ich das überhaupt verhindern kann?

Geht nicht. ;D

3. Wie lese ich eine Datei Zeilenweise korrekt wieder ein?

Google: 1.000.000 Themen dazu.

Hinweis: Properties (Java Platform SE 6) nutzen.
 

fastjack

Top Contributor
Natürlich geht das, und zwar mit Validierung. Eigentlich sollte man beim Einlesen von Daten, die manuell eingegeben werden, immer validieren. In dem Fall mußt Du die Validierung nur selbst übernehmen, Du kannst ein Interface Validator schreiben, dann verschiedene Implementierungen für verschiedene Fälle produzieren, z.b. Validatoren für die Koordinaten, für die Struktur an sich, d.h. für die Parameternamen (die müssen ja irgendwo bekannt sein, auch was sich dahinter verbirgt).

P.S. ich würde die Datei nur als "Zwischenschicht" betrachten, d.h. Du hast irgendwo eine persistierte Struktur, die die Einstellungen enthält und erst dann geupdatet wird, wenn die Datei valide ist.
 

Timothy Truckle

Top Contributor
Prinzipiell würde ich die Klasse [JAPI]Properties[/JAPI] empfehlen.
1. Konzeptfrage: Habt Ihr einen Tipp für mich, wie ich die Datei selbst prüfen kann?
Mir geht es speziell darum, wie ich damit umgehen soll, wenn der User mit der Parameter-Datei unfug getrieben hat - z.B. versehentlich einen Zeilenumbruch entfernt und damit aus zwei Zeilen eine macht. Dies würde eine entsprechende Methode zum Einlesen natürlich vollständig zum Scheitern verurteilen
die [JAPI]Properties[/JAPI]-Klasse kann auch XML-Dateien verarbeiten, denen sind Zeilenumbrüche wurst.

2. Konzeptfrage: Habt Ihr vielleicht eine Idee, wie ich das überhaupt verhindern kann?
Sodass der User die Datei vielleicht beim normalen Arbeiten gar nicht kaputt machen kann?
Verhindern? Nein, aber erkennen: Du hannst den Dateiinhalt vor dem Schreiben durch die Klasse [JAPI]CRC32[/JAPI] schleusen. Wenn Du die Checksumme selbst mit in der Datei speicherst musst Du die natürlich vorher rausfiltern...

3. Wie lese ich eine Datei Zeilenweise korrekt wieder ein?
Die Properties Klasse kann das. List Dir mal die API dazu durch.
Properties (Java Platform SE 7 )

bye
TT
 

fastjack

Top Contributor
Ich würde kein XML empfehlen, da Otto-Normal User es mit XML immer schwer hat, ansonsten ist es eine Alternative. Checksumme ist auch nicht gut, da dann gar keine Änderungen der Datei mehr möglich sind (durch den User), was wohl gewünscht ist. Es geht nur ums kaputt machen der Datei, also illegale Werte eingeben usw.

Properties ist schon gut, aber Sachen wie "KoordX=x=y" werden in Properties 1:1 übernommen, darum musst Du selbst validieren.
 

Moch

Bekanntes Mitglied
Danke für Eure Hilfe.
Das Einlesen habe ich sauber gelößt bekommen.

Damit der User jetzt nicht mehr in den Dateien rumfuselt, habe ich jetzt einfach eine "kleine" GUI geschrieben (bzw. ich bin noch dabei), in welcher der User alle Eingaben bequem tätigen kann. Aus dieser GUI werden die Dateien dann automatisch generiert. Das Reduziert die Fehlerwahrscheinlichkeit erheblich und steigert den Komfort.

Lieben Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Jar Datei mit Parameter starten Allgemeine Java-Themen 7
B jar per doppelklick auf datei parameter übergeben Allgemeine Java-Themen 5
X Parameter bei Start über Batch-Datei übergeben(Tag und Zeit) Allgemeine Java-Themen 3
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 2
F KI / Machine Learning Parameter verschachtelte for Schleifen Allgemeine Java-Themen 1
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
JavaJüngling beliebige Collection die Comperable Elemente enthält als Parameter Allgemeine Java-Themen 37
M Datensatz auf ein bestimmten Parameter einzugrenzen Allgemeine Java-Themen 11
B JAX - RS.... Multiple parameter application/x-www-form-urlencoded.... Allgemeine Java-Themen 6
B Parameter Konstruktor plus rechnen Allgemeine Java-Themen 6
L Die abzuleitende Klasse als Parameter übergeben Allgemeine Java-Themen 4
W Haben Konstruktoren in Java eigentlich immer mindestens einen Parameter? Allgemeine Java-Themen 4
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
F URI mit Parameter klappt nicht Allgemeine Java-Themen 1
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
temi best practice: Parameter überprüfen, wo? Allgemeine Java-Themen 9
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
MiMa If-Abfrage mit Parameter Allgemeine Java-Themen 8
I Javaaufruf aus Batch inkl. Parameter (Adminrechte) Allgemeine Java-Themen 2
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
K Java FX Zu startenden FXML-Controller per Parameter wählen Allgemeine Java-Themen 2
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
T Klassen Parameter weitergabe Allgemeine Java-Themen 1
C Überschreiben mit kontravariante Parameter Allgemeine Java-Themen 13
M Parameter auslesen im Servlet Allgemeine Java-Themen 0
perlenfischer1984 Wann ist ein Parameter Check sinnvoll Allgemeine Java-Themen 7
Neumi5694 Vererbung Parameter muss 2 Bedingungen erfüllen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
T Parameter Allgemeine Java-Themen 6
R Parameter Adapter - Design Allgemeine Java-Themen 1
I Methode verallgemeinern (Methode als Parameter)? Allgemeine Java-Themen 10
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
H Generics als Parameter Allgemeine Java-Themen 1
N [stream-api] Parameter pro Typ zählen Allgemeine Java-Themen 1
OnDemand Maximale Parameter Allgemeine Java-Themen 5
M final vor dem parameter eines Konstruktors Allgemeine Java-Themen 1
S Servlet, per URLConnection Mit String Http Parameter mitsenden Allgemeine Java-Themen 3
H JasperReport: Parameter befüllen Allgemeine Java-Themen 7
Joew0815 JList + JTableModel: Parameter der Tabelle übergeben Allgemeine Java-Themen 10
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
G Polymorphie Funktion als Parameter Allgemeine Java-Themen 8
G Methoden Unterschiedliche viele Parameter Allgemeine Java-Themen 17
F Parameter im Link /jar-Aufruf Allgemeine Java-Themen 12
S OOP Designrichtlinie Parameter Prüfung Allgemeine Java-Themen 7
C char und char-Array als parameter übergeben Allgemeine Java-Themen 6
B Array Parameter Problem Allgemeine Java-Themen 3
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
S Keytool: mögliche Werte für Parameter Allgemeine Java-Themen 4
H Externes Programm, Parameter Allgemeine Java-Themen 6
C Webservice: XML Parameter übergabe. Allgemeine Java-Themen 7
M Session-Parameter setzen? Allgemeine Java-Themen 10
P VM-Parameter -D... Allgemeine Java-Themen 3
V Wildcard aus Parameter in return type Allgemeine Java-Themen 2
O Collections Eigene Methodenzusicherung bei Collections als Parameter Allgemeine Java-Themen 2
W ScriptEngine + Wie Parameter übergeben bei Fukntion? Allgemeine Java-Themen 2
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
F Parameter für Java Applikation per xml ins Meta-inf speichern? Allgemeine Java-Themen 3
J BlueJ Methode hat zu viele Parameter Allgemeine Java-Themen 6
R VM-Error - BadWindow (invalid Window parameter) Allgemeine Java-Themen 4
J Parameter an Java übergeben Allgemeine Java-Themen 10
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
P VM Parameter und .jar Allgemeine Java-Themen 3
L Parameter-Objekte verändern oder nicht? Allgemeine Java-Themen 6
J Parameter absichtlich für außen verändern Allgemeine Java-Themen 4
A wie kann man Parameter an ein Task übergeben? Allgemeine Java-Themen 3
Iron Monkey Singleton mit Parameter Allgemeine Java-Themen 14
G setter und getter: Parameter Überprüfung Allgemeine Java-Themen 6
G JVM Parameter Allgemeine Java-Themen 7
G Parameter Bedeutung Allgemeine Java-Themen 4
W Properties-Klasse: mehrere Parameter-Belegungen übergeben? Allgemeine Java-Themen 2
J Unicode: cmd parameter (main args); exec params; filenames Allgemeine Java-Themen 2
C US_export_policy.jar und local_policy.jar VM Parameter Allgemeine Java-Themen 1
J Casten ueber generischen Parameter? Allgemeine Java-Themen 5
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
G generische Klasse als Parameter einer generischen Klasse Allgemeine Java-Themen 5
G Parameter oder Attribut (wann nehme ich was?) Allgemeine Java-Themen 12
S .rar-Dateien ein Passwort als Parameter übergeben Allgemeine Java-Themen 5
N Funktion als Parameter einer anderen Funktion Allgemeine Java-Themen 5
D Parameter parsen? Allgemeine Java-Themen 15
G Typ Parameter & Reflections Allgemeine Java-Themen 4
F mehrere Verzeichnisse als Parameter Allgemeine Java-Themen 15
Y Javadoc - Wie Parameter ansprechen bei Methodenkommentar Allgemeine Java-Themen 2
G Parameter bei mailto Allgemeine Java-Themen 2
C Java Parameter zum starten ohne auf Programmende zu warten Allgemeine Java-Themen 4
P Übergabe- Parameter SQL Map Allgemeine Java-Themen 45
S URL-Parameter auslesen Allgemeine Java-Themen 2
F Parameter vs Argument Allgemeine Java-Themen 4
T xverify-parameter : Workaround zur Laufzeit? Allgemeine Java-Themen 8
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
P command line parameter auswerten Allgemeine Java-Themen 3
M Parameter an main übergeben aber wie? Allgemeine Java-Themen 4
T Parameter an Thread übergeben Allgemeine Java-Themen 8
S synchronisation einer Methode abhängig vom Parameter Allgemeine Java-Themen 10
J Interface als Parameter übergeben Allgemeine Java-Themen 4
L JNI: C-->Java : Methode mit String-Parameter Allgemeine Java-Themen 18
A Weshalb man Parameter auf Gültigkeit prüfen sollte Allgemeine Java-Themen 6
H in JOE die Parameter -xmx256m -xrs hinzufügen Allgemeine Java-Themen 2
K Testen einer Klasse mit File Objekt als Parameter Allgemeine Java-Themen 6
X Default-Werte für Methoden-/Funktions-Parameter Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben