Multiple Fileaccess - sync?

huckleberry

Bekanntes Mitglied
Hallo Forum,

ich habe mehrere Prozesse die auf eine und dieselbe Datei erstellen/zugreifen.
Es ist eine *.cvs Datei für OpenOffice Tabellencalculation.

Die Dateinamen sind individualisiert, also mit Zeitstempel versehen, sodass alle beispielsweise in der ersten Minute auf Datei "example-1.cvs" zugreifen in der zweiten Minute auf "example-2.cvs" usw.

Also der erste Prozess, der diese Datei braucht, soll diese erstellen. Wenn ein anderer Prozess diese Datei schon erstellt hat, soll dieser Prozess zugreifen können. --> also jeder Prozess ruft dazu folgenden createCVS(i) auf.
Java:
//.. zB konstuktor
File currentCVSF = null;
FileWriter currentRegionCVSFW = null; 
//..

public void createCVS(long cTime){
	String RFOLDER = "/verzeichnis";
	try {
		this.currentCVSF = new File(RFOLDER,"Tabelle-"+cTime+".cvs");
		this.currentCVSFW = new FileWriter(currentCVSF, true);				
		if (currentCVSF.length() == 0) {
			currentCVSFW.write(	
					"Spalte_1;" +
					"Spalte_2;" +
					"Spalte_3;" +
					"Spalte_4;" +
					"Spalte_5;" +
					"Spalte_6;\n");
			}
			currentCVSFW.flush();
		} catch (Exception e) {
			System.out.println("*** Exception GroupFile"+e);
		}
	}
Dann schreibt jeder, wenn er was zu loggen hat, eine neue Zeile mit seinen Daten..
Java:
public void addRowCVS(String ac, long cTime){
	try {			
		String szT = "";
		szT += TimeUnit.NANOSECONDS.toMillis(aObj.getCurrentTime())+";" ;
		szT += ac.concat(";");
		szT += String.valueOf( this.getData1 ).concat(";");
		szT += String.valueOf( this.getData2 ).concat(";");
		szT += String.valueOf( this.getData3 ).concat(";\n");
		currentRegionCVSFW.write(szT);
		currentRegionCVSFW.flush();
	} catch (Exception e) {
		System.out.println("*** Exception: "+e);
	}
}
Wenn dann die aktuelle minute vorbei ist rufen alle:
Java:
public void closeCVS(){
	try {
		this.currentCVSFW.flush(); // Falls noch was im Stream ist, flushen()
		this.currentCVSF = null; // Sauber machen
		this.currentCVSFW.close(); // closen()
	} catch (Exception e) {
		System.out.println("*** Exception on close(): "+e);
	}
}

Es läuft noch nicht so ganz sauber ab.
Habe mir überlegt, ob es sync Probleme geben könnte?
Oder wird das von der JVM alles gehandled?

Gibt es vlt. eine geeignetere zB StreamWriterSynced Klasse? (Kenne nicht alle auswändig)

Wenn mal bei einem Prozess die closeCVS Methode nicht aufgerufen wird kann es doch murks geben?
Wäre es dann sinnvoller, wenn jeder Prozess, wenn er denn eine Zeile hinzufügen möchte, jedesmal (!) createCVS() auruft, mit addRowCVS() seine Zeile zufügt, und sofort mit closeCVS den Strom schlieest. Wenn er in die gleiche Datei nochmal schreiben müsste, jedesmal alles von vorne? Unnötig?

Ich danke im voraus und mfg Huck!
 

huckleberry

Bekanntes Mitglied
Ich habe jetzt viele Applikationen, die exakt zur selben Zeit eine Datei beschreiben..
Der erste soll wie gehabt die Datei erstellen, und alle anderen sollen auch reinschreiben dürfen.
Klappen tut es noch nicht :|
 
G

Gast2

Gast
natürlich nicht - udiags! ... Du musst dafür sorgen das die Programm einzeln da rein schreiben können - das geht nur über ein weiteres Program ... das Programm liest und schreibt in die Dateien - über Socket holen die anderen Programme ihre Daten bzw. bringen die Daten ... mir stellst sich dabei die Frage "Wieso soviele Programme und nicht nur eins?"
 

huckleberry

Bekanntes Mitglied
Wirklich so umständlich??
Es sind viele Knoten, welche synchronisiert sind und zur gleichen Zeit wichtige Daten loggen müssen. Die Knoten sind unabhngig voneinander, jedoch wäre es wichtig, wenn diese die gleiche Datei beschreiben.
 
G

Gast2

Gast
das hat nichts mit dem Framework am Hut ... es verhindert einzig und alleine schon das Betriebssystem das mehre Programm in eine Datei schreiben ... daher das Syslog
 

huckleberry

Bekanntes Mitglied
Achso, schade.
Es schreibt jeder nur maximal eine Zeile rein und zum Glück sind die Zeiten zu denen geschrieben werden muss unterschiedlich. Ich habs dann so, dass jeder wenn er grad was schreiben muss, guckt ob die Datei da ist, eine evtl. erste Zeile (Header) herinschreibt und dann seine eigene Zeile.
Wenn schon was drinsteht, nur eigene Zeile. Es soll ne CVS Datei, also Tabelle per Semikolon getrennt.

Java:
	public void addEntryRegionCVS(String ac, long cTime){
		long cGrpId = this.getId();
		String RFileName = "GroupID-"+cGrpId+"@"+cTime;
		try {						 
			this.dhCurrentRegionCVSF = new File(RFOLDER, RFileName.concat(".cvs") );
			this.dhCurrentRegionCVSFW = new FileWriter(dhCurrentRegionCVSF, true);
			if ( dhCurrentRegionCVSF.length() == 0 ) {
				dhCurrentRegionCVSFW.write(	
						"TS [ms];Aktion;CS_FLAG;V_ID;S_ID;#aMemberz;#cMemberz;#Joins;" +
						"Position;Speed;Misc\n");
				dhCurrentRegionCVSFW.flush();
			}
			GPS myPos = new GPS(0, myObj.getLongitude(), dhVSM.getLatitude());
			String szT = String.valueOf( TimeUnit.NANOSECONDS.toMillis(cTime) ).concat(";");
			szT.concat(ac).concat(";");
			szT.concat(this.dhCtrlState.toString()).concat(";");
			szT.concat(this.dhBCId).concat(";");
			szT.concat(this.dhSumoId).concat(";");
			szT.concat(String.valueOf( this.getRandomGrpID() )).concat(";");
			szT.concat(String.valueOf( this.dhAllVIR.size() )).concat(";");
			szT.concat(String.valueOf( this.dhRemainingVIR.size()) ).concat(";");
			szT.concat(String.valueOf( this.dhJoinCounter )).concat(";");
			szT.concat(String.valueOf( GeoCalculator.formattedGPS(myPos)) ).concat(";");
			szT.concat(String.valueOf( dhVSM.getSpeed() )).concat(";");
			szT.concat(String.valueOf( this.toString() )).concat(";\n");
			dhCurrentRegionCVSFW.write(szT);
			dhCurrentRegionCVSFW.flush();	
		} catch (Exception e) {
			System.out.println("*** Exception GroupFile"+e);
		}
	}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
JD_1998 Multiple Parametereingabe Java Basics - Anfänger-Themen 3
D [AES] input not multiple of 16 Java Basics - Anfänger-Themen 2
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Multiple Clients and one Server Java Basics - Anfänger-Themen 2
x22 Java Multiple Choice Test Java Basics - Anfänger-Themen 8
Dogge Multiple markers at line 15 Java Basics - Anfänger-Themen 13
U [Problem] Handling multiple frames Java Basics - Anfänger-Themen 5
P Threads Multiple Dialogboxen Java Basics - Anfänger-Themen 6
G Multiple Leerzeichen entfernen Java Basics - Anfänger-Themen 13
J String zu Double parsen (multiple points) Java Basics - Anfänger-Themen 2
H Multiple Markers at this line Java Basics - Anfänger-Themen 3
S Threads Handling multiple different Threads Java Basics - Anfänger-Themen 7
H Multiple JFrames im GUI Editor von NetBeans Java Basics - Anfänger-Themen 2
S jList Multiple Selection mit Klick Java Basics - Anfänger-Themen 2
C Multiple Choice Test Java Java Basics - Anfänger-Themen 5
T Multiple BufferedImage Java Basics - Anfänger-Themen 3
H Eclipse Sync ohne File Header Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben