Wert in Ascii Datei ändern, ohne die Datei neu zu schreiben

GGK_01

Bekanntes Mitglied
Hallo,

ich habe eine Ascii-Datei, in der ich den Wert für Running auf 1 bz. 0 setzen möchte.
Diesen Wert gibt es jedoch mehrfach, daher bin ich auf dein Eintrag in eckigen Klammern (Bsp. [2]) zur Identifizierung des zu ändernden Eintrages angewiesen.

Meine Frage, wie kann ich denn 1 bzw. 0 für Running setzen, ohne die Datei neu schreiben zu müssen?
(Das Ganze sollte dann in einem GUI möglich sein).
Könnte mir jemand einen Denkanstoss geben?

Code:
[02]
Arguments[]=
Runlevel=1
Running=1

[03]
Arguments[]=
Runlevel=1
Running=1

Danke GGK
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Ich denke, das sollte mit einer RandomAccessFile möglich sein (speziell mit memory mapped files, also raf.getChannel().map(...))
 

GGK_01

Bekanntes Mitglied
@EikeB: da es sich bei der Datei um eine Konfigurationsdatei eines Servers handelt und über Running Prozesse gestoppt bzw. gestartet werden.
Ich möchte nur das ändern was unbedingt notwendig ist...

GGK
 

Timothy Truckle

Top Contributor
@EikeB: da es sich bei der Datei um eine Konfigurationsdatei eines Servers handelt und über Running Prozesse gestoppt bzw. gestartet werden.
Ich möchte nur das ändern was unbedingt notwendig ist...

GGK
Das ist sehr löblich, aber der Ansatz ist falsch:
Über die API kannst Du sicher stellen, dass Du immer gültige Schlüssel/Werte schreibst. Die RandomAccessFile-Methode ist dagegen gefährlich: was, wenn jemand ein zusätzliches Leerzeichen einfügt? Dann überschreibst Du
Code:
Running=1
mit
Code:
Running01
...

bye
TT
 
Zuletzt bearbeitet von einem Moderator:

GGK_01

Bekanntes Mitglied
Die Lösung mit den Properties funktioniert schon mal nicht...
da beim Speichern des geänderten Wertes die Datei neu geschrieben wird...

GGK
 

GGK_01

Bekanntes Mitglied
Java:
      FileOutputStream propOutFile = new FileOutputStream( filename );
	      Properties p1 = new Properties();
	      p1.setProperty( "Running", "2" );
	      p1.store( propOutFile, "Test Info" );
	      FileInputStream propInFile = new FileInputStream( filename );
	      Properties p2 = new Properties();
	      p2.load( propInFile );
	      p2.list( System.out );
	     }

auch damit wird ein neues File erzeugt...leider
 
B

bone2

Gast
Selbst wenn du die Datei mit einem Editor öffnest, wird sie komplett neu geschrieben.
Dann musst du da manuell über RandomAccess rangehen.
 
S

SlaterB

Gast
was schwierig wird da bytesbasiert, nicht genau chars zu fassen sind,

es bleibt dabei, Einlesen, Ändern, Speichern, ob manuell oder mit Hilfe von Tools wie Properties,
was ganz normales, inwiefern ist das störend? ist doch eine Mini-Datei, merkt man gar nicht,

hat ein anderes Programm parallel Zugriff auf die Datei?
das würde hier wohl genauso Probleme machen wie bei RandomAccessFile


edit:
der Code von 10:40 ist übrigens nicht das wovon zuvor geredet wurde,
erst save, dann load, dann ist nur der eine Wert da,

erst load, dann ändern, dann save -> ein Wert geändert, Rest weiter vorhanden
 
Zuletzt bearbeitet von einem Moderator:

GGK_01

Bekanntes Mitglied
stimmt...das listening hab ich etwas zu gekürzt...

folgendes:
in der properties.txt sind folgende Einträge:
Code:
Running=1
Debug=2
Level=3

dann starte ich das Programm:
Java:
String filename = "D:/tmp/properties.txt";
	    try
	    {
	      
	      FileOutputStream propOutFile = new FileOutputStream( filename );
	      FileInputStream propInFile = new FileInputStream( filename );
	      Properties p1 = new Properties();
	      p1.load(propInFile);
	      p1.setProperty( "Running", "1" );
	      p1.store( propOutFile, "Test Info" );
	      
	      Properties p2 = new Properties();
	      p2.load( propInFile );
	      p2.list( System.out );
	      propOutFile.close();
	      propOutFile.close();
	     }
	     catch ( FileNotFoundException e ) {
	       System.err.println( "Can’t find " + filename );
	     }
	     catch ( IOException e ) {
	       System.err.println( "I/O failed." );
	     }

properties.txt nach dem Durchlauf:
Code:
#Test Info
#Fri Feb 08 13:06:19 CET 2013
Running=1

ja, Serverprozesse greifen laufend auf die Datei zu...
die Datei hat ca. 100 Zeilen, die nicht alle in der Form Variable=Wert vorliegen, und ich möchte diese unverändert lassen
 
S

SlaterB

Gast
wenn es nicht ginge, wäre das ja nun kein extremer Beinbruch, man kann auch auf andere Weise die Datei einlesen,

das Problem ist hier, dass die Zeile
> FileOutputStream propOutFile = new FileOutputStream( filename );
so früh steht, an dieser Stelle wird bereits die Datei gelöscht, leer neu erstellt,
danach dann nur leer gelesen, da muss man aufpassen

----

> die Datei hat ca. 100 Zeilen, die nicht alle in der Form Variable=Wert vorliegen, und ich möchte diese unverändert lassen

BufferedReader + Writer wohl eher, wie anfangs geschrieben wissen welche Zeile, welche Zeichen,
eigentlich kein Thema für Wochen und Monate..
 

GGK_01

Bekanntes Mitglied
stimmt...
Java:
FileOutputStream propOutFile = new FileOutputStream( filename );
p1.store( propOutFile, "Test Info" );

löste das Problem...
 
S

SlaterB

Gast
zweimal aus demselben FileInputStream, propInFile, zu lesen, ist übrigens auch recht gewagt,
hätte ich geraten hätte ich getippt dass das nicht ginge,
ach geht ja auch gar nicht ;) du schaust im Moment sicher direkt in die Datei
 

Crian

Top Contributor
Wenn andere Prozesse auf die Datei zugreifen, solltest du sie während der Bearbeitung vor Zugriffen schützen. Stichwort: Semaphore.
 

GGK_01

Bekanntes Mitglied
ich hab jetzt noch das Problem, dass die Reihenfolge der Einträge innerhalb properties.txt nach dem Ändern durcheinander geworfen werden.

properties.txt vor Programmstart:
Code:
[1]
Argument[]=
Running=1
Level=2
Debug=3

[2]
Argument[]=
Running=21
Level=22
Debug=23
properties.txt nachProgrammstart:
Code:
#
#Fri Feb 08 13:43:08 CET 2013
Running=1
[1]=
[2]=
Level=22
Argument[]=
Debug=23

gibt es dazu vielleicht hinweise?

GGK
 
S

SlaterB

Gast
einfach suchen, 'java properties order', oder es anderen überlassen..

an sich scheint es eine unsortierte Map zu sein, es sollte dich besser auch nicht kümmern,
wenn du aber die Datei nach Speichern anschauen/ manuell bearbeiten musst, dann schon verständlich

hier ein mehr oder weniger vertrauenswürdiges Konzept zur festen Order (LinkedProperties)
configuration - Pulling values from a Java Properties file in order? - Stack Overflow

------

deine Property-Datei-Vorlage sieht verdächtig aus:
auf Spezialitäten wie eckige Klammern verzichte lieber komplett, auch Zahlen bei den Keys müssen nicht unbedingt sein,
(aber wenn es getestet geht, dann bitte)

absolut unmöglich ist eine Aufteilung in Abschnitte und dann gar wiederholend die gleichen Properties,
es ist einfaches Key=Value-Konzept, damit fallen deine Wünsche unter den Tisch

verwende mehrere Properties-Dateien oder


Code:
one.Argument=
one.running=1
one.level=2
one.debug=3

two.argument=
two.running=21
two.level=22
two.debug=23

die Punkt-Notation ist bekannter Standard,
(das heißt aber nicht dass Properties dir eine Methode a la 'gib alle Properties zu 'one' ' bereitstellt)

alle Nicht Key-Value-Zeilen solltest du als Kommentar mit # beginnen lassen,
beim Speichern kommen die aber wohl wieder an den Anfang (edit: werden gar gelöscht, also nicht eingelesen..),
Leerzeilen bleiben auch nicht bestehen usw.

da musst du schon viel schlucken, oder BufferedReader ;)
 
Zuletzt bearbeitet von einem Moderator:

GGK_01

Bekanntes Mitglied
ist ja so, dass ich eine vorgebene Datei habe, in der ich nur den Wert für Running auf 0 oder 1 setzen will...

ich versuche über die Propteries das umzusetzen...falls das nciht funktioniert...versuche ich mich über die
java configuration api oder random access an die Lösung zu tasten.

Bps. der Datei:
Code:
[02]
Arguments[]=
Runlevel=1
Running=1

[03]
Arguments[]=
Runlevel=1
Running=1
 
S

SlaterB

Gast
siehe auch edits in meinem letzten Posting, wobei das meiste, etwa der Hinweis dass keine Properties doppelt vorkommen dürfen,
von Anfang an drin stand, also so gehts nicht mit Properties,

das Format der Datei ist wohl nicht zu verhandeln?
wer verwendet überhaupt das Format, hast du Java-Code zur Auswertung, wird dort eingelesen, wird dort das Running-Level extrahiert?
das wäre dann ja eine gute Vorlage für Lesen, Ändern, Speichern
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
T Ascii String zu Hex Wert wandeln? Java Basics - Anfänger-Themen 6
H Escape Sequenz ASCII Wert als Oktalzahl Java Basics - Anfänger-Themen 6
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
P Verzweigungen Wert zurück geben Java Basics - Anfänger-Themen 2
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
F Java int-Wert wird resetet Java Basics - Anfänger-Themen 21
J Erste Schritte Wert aus JTextField zurückgeben Java Basics - Anfänger-Themen 6
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
J Wert bei Objekterzeugung verändern Java Basics - Anfänger-Themen 12
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23
D Erste Schritte Java speichert wert des Scanners nicht Java Basics - Anfänger-Themen 2
B Erste Schritte if Anweisung mit Wert Übernahme Java Basics - Anfänger-Themen 3
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
D Compiler-Fehler Array an Methode übergeben und Wert zurückbekommen Java Basics - Anfänger-Themen 3
I Schleife fragt Wert ab bis 0 kommt (mit IO.java klasse) Java Basics - Anfänger-Themen 16
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37

Ähnliche Java Themen

Neue Themen


Oben