Bestimmen, ob File fertig geschrieben wurde

Status
Nicht offen für weitere Antworten.

mauroalberti

Mitglied
Hallo zusammen,

hätte eine kleine Frage:

ich bastle grade an einer Applikation, die mit Hilfe eines Druckertreibers eine TIFF-Datei erstellt. Leider kann man bei dem Treiber den Ausgabepfad nicht dynamisch festlegen, aus diesem Grund muß die erstellte TIFF-Datei noch in den gewünschten Ordner kopiert werden.

Problem: ich starte den Thread, der die TIFF-Erzeugung anstösst - bevor ich allerdings mit dem Kopiervorgang beginnen kann, muss ich sicherstellen, dass das TIFF fertiggestellt wurde (sehe ich doch richtig??)

Da der Treiber keine Java-API hat, kann ich leider nicht auf dessen Funktionen zurückgreifen.

Bisher verwende ich folgende Kopierschleife:
Code:
try {
		FileInputStream fis  = new FileInputStream(tiffFileByPrinterDriver);
		FileOutputStream fos = new FileOutputStream("sometiff.tif");
	byte[] buf = new byte[2048];
	int i = 0;
	while((i=fis.read(buf))!=-1) {

	  copiedbytes += i;	
		
	  fos.write(buf, 0, i);
	  
	  }
	fis.close();
	fos.close();
	} catch (Exception e) {
	e.printStackTrace();
	}

Na ja, das Problem ist, dass eben nicht das gesamte TIFF kopiert wird, sondern nur ein Teil davon...

Wie kann ich feststellen, ob ein File, dessen Adresse ich natürlich habe, dessen Größe ich allerdings nicht wissen kann, vollständig auf Platte geschrieben wurde?? Der Test darauf, ob das File eine Größe ungleich 0 hat, scheint nicht zu funktionieren, da sich während des Schreibvorgangs die Größe tatsächlich zu vergrößern scheint bis die tatsächliche Größe erreicht wurde (sollte ich mich da irgendwie getäuscht haben, bitte ich um Berichtigung).

Danke, Alex
 

Nova

Bekanntes Mitglied
Dateien verschieben kannst du mit meineDateiAlsFileObkjekt.renameTo(neuerSpeicherortAlsFileObjekt)
(Probleme gibts aber wenn man auf ein anderes Dateisystem zugreifen will)
renameTo liefert ein boolean zurück das besagt ob das verschieben erfolgreich war.

Während die Datei noch geschrieben wird kann man sie nicht verschieben, also z.B. in einem Thread(!) ein paar Sekunden warten, dann versuchen mit renameTo die Datei zu verschieben und falls nich erfolgreich nochmal warten,...
z.B. so:
Code:
Thread th = new Thread(){
    public void run(){
        while (!meineDatei.renameTo(neuerSpeicherort)){
            try {
                Thread.sleep(2000); // 2 Sekunden warten
            } catch (Exception e){}
        }
    }
};
th.start();


Wenns da noch ne "sauberere" Lösung gibt wäre ich daran auch interessiert.


mfg
Christian
 
A

Anmeldeboykottierer

Gast
Hi,
die Frage die ich mir jetzt stelle ist, wie du die Tiff Datei erzeugst.
Da du von einem Treiber sprichst, handelt es sich wohl um eine plattformspezifische Lösung, wie sieht die denn aus?
Du sagst, dass du einen Thread startest, die Alternative ist natürlich, dass du das Kopieren sequentiell nach in dem gleichen Thread (nach dem Drucken) startest.
Zudem sollte so ziemlich jedes OS eine Möglichkeit bieten auf die Ausführung eines Threads zu warten.
Die Alternative wäre also evtl. dadurch gegeben, dass du einfach wartest bis fertig gedruckt wurde.

Gruß Der Anmeldeboykottierer
 

mauroalberti

Mitglied
OK, das mit dem Start der TIFF-Erzeugung mit Hilfe eines Threads war etwas unpräzise. Es läuft so ab, dass ich über einen Wrapper eine DLL anspreche, welche sich dann um die Erzeugung des TIFFs (besser gesagt das Drucken des TIFFs in eine Datei) kümmert. Ich wüsste nicht, wie ich von der Beendigung dieses Drucker-Jobs benachrichtigt werden könnte.

Der Tipp, es mit der rename-Methode zu versuchen, nützt mir leider auch nichts, da dies nur funktioniert, wenn es die entsprechende Datei innerhalb des Zielverzeichnisses noch nicht gibt (mir kam es so vor, als würden bereits existierende Dateien dabei nicht überschrieben, lasse mich aber gerne eines Besseren belehren).

Ich habe jetzt folgende Variante ausprobiert (scheint auch zu funktionieren): ich starte einen Thread, der überprüft, ob die Größe der Zieldatei > 0 ist. Ist dies der Fall, so versuche ich einen OutputStream zu der Datei aufzumachen. Da aber momentan der Druckprozess schon in die Datei schreibt, bekomme ich eine FileNotFoundException. Das ganze wird dann so lange wiederholt, bis ich auf die Datei zugreifen könnte.

Wie schon gesagt, scheint dies zu funktionieren, aber hat eventuell jemand eine Idee, wie ich ohne Benutzung des OutputStream prüfen kann, ob ein anderer Prozess auf das Zielfile zugreift?

Sollte der von mir verwendete Ansatz aus irgend einem Grund unbrauchbar sein, wäre natürlich auch sehr nett, dies hier detailliert zu erläutern.

Danke, Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Zeile unter einer bestimmen Zeile hinzufügen(File) Allgemeine Java-Themen 1
G log4j File erzeugen und Pfad bestimmen Allgemeine Java-Themen 3
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
S Best Practice Punkt im dreidimensionalen Raum Bestimmen Allgemeine Java-Themen 24
C Movement auf bestimmten Weg bestimmen Allgemeine Java-Themen 11
ralfb1105 Java LogManager property bestimmen/ausgeben Allgemeine Java-Themen 1
X Punkte in einem Feld bestimmen Allgemeine Java-Themen 22
C Kürzeste Wörter bestimmen Allgemeine Java-Themen 8
GreenTeaYT Turtle Richtung bestimmen und Consl? Allgemeine Java-Themen 3
J Sortieralgorithmus, Komplexität bestimmen Allgemeine Java-Themen 3
A Selbsterstellte 404-Seiten bestimmen, die sich als 200 ausgeben Allgemeine Java-Themen 8
A Winkel bestimmen Allgemeine Java-Themen 5
S spaltenweise Maximalwert bestimmen Allgemeine Java-Themen 12
M ImageJ-Wie kann ich die Abstände von 2 Kreisen bestimmen Allgemeine Java-Themen 6
R MD5-Hash eines Strings bestimmen Allgemeine Java-Themen 2
kodela Arbeitspfad einer JAR-Datei bestimmen Allgemeine Java-Themen 4
P Wie Laufwerke bestimmen ? Allgemeine Java-Themen 7
E String Overlapping bestimmen Allgemeine Java-Themen 3
D Bild Typ bestimmen Allgemeine Java-Themen 9
A STackgrösse bestimmen Allgemeine Java-Themen 5
C Wie kann man die IText Table Position bestimmen? Allgemeine Java-Themen 3
A Listener für constructor einer bestimmen Klasse Allgemeine Java-Themen 9
X [Java] Internationalisierung / Language codes bestimmen Allgemeine Java-Themen 4
G Grenzwert einer Folge bestimmen Allgemeine Java-Themen 2
M Richtigen COM-Port bestimmen Allgemeine Java-Themen 14
M Mit Java CPU Typ bestimmen... Allgemeine Java-Themen 7
aze Source Folder bestimmen Allgemeine Java-Themen 2
M Drucken Schacht auswählen/bestimmen Allgemeine Java-Themen 2
F Typ eines Objekts zur Laufzeit bestimmen? Allgemeine Java-Themen 8
F Eigenschaften von MP3 Dateien bestimmen Allgemeine Java-Themen 2
F Anzahl der nachkommastellen bestimmen nur wie? Allgemeine Java-Themen 10
V Beratung zum Bestimmen der "Mittel"(Java,Sql) mein Allgemeine Java-Themen 3
K CPU-Typ usw. bestimmen Allgemeine Java-Themen 10
G Subsets bestimmen Allgemeine Java-Themen 7
B java-version bestimmen innerhalb von Programm Allgemeine Java-Themen 4
J html seite in java einbinden und url bestimmen Allgemeine Java-Themen 5
E Wie die Länge eines Array bestimmen Allgemeine Java-Themen 9
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
D Read JSON File Problem Allgemeine Java-Themen 9
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C jar File mehrfach aufrufen (als Windows Dienst) Allgemeine Java-Themen 5
N File Path mit Variablen angeben Allgemeine Java-Themen 1
izoards Zugriff auf gemeinsame Ressource (CSV-File) Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
F jar File ausführen Allgemeine Java-Themen 14
M File Binary Representation Allgemeine Java-Themen 1
N jar File auf Mac mit Doppelklick starten Allgemeine Java-Themen 5
O Input/Output java.io.File beenden Allgemeine Java-Themen 5
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
T Jar File zu exe... Allgemeine Java-Themen 3
M Foreign Memory API / Memory-Mapped File Allgemeine Java-Themen 0
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
S File lesen und schreiben Java 6 Allgemeine Java-Themen 2
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
F Input/Output FileNotFoundException, obwohl File existiert Allgemeine Java-Themen 5
G Excel File öffnen, in Zelle schreiben, abspeichern Allgemeine Java-Themen 6
L JAR-File auf Ilias (LMS) laufen lassen Allgemeine Java-Themen 0
ralfb1105 Classpath Directory fuer Properties File Allgemeine Java-Themen 2
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
A File lesen Codierung Charset Allgemeine Java-Themen 5
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15
M Key-File im selben Ordner speichern? Allgemeine Java-Themen 18
I TrueZip add file to archive Allgemeine Java-Themen 10
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
J ftp - delete file ohne appache Allgemeine Java-Themen 8
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
T ImageIO.read -> Can`t read input file Allgemeine Java-Themen 11
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
C Swing File[] als klickbare links in irgendeinem Swing Element Allgemeine Java-Themen 3
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
C Authentifizierung mit java.nio.file? Allgemeine Java-Themen 5
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
G Java/LibGDX File Loading Exception Allgemeine Java-Themen 2
Cromewell JavaFX FXML-File lädt unter Ubuntu nicht Allgemeine Java-Themen 7
D Java Anwendung mit dll File Allgemeine Java-Themen 5
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
thet1983 Input/Output read properties file from classpath Allgemeine Java-Themen 3
J Umwandeln von URL zu File und danach kopieren geht nicht Allgemeine Java-Themen 1
J Properties file ändern Allgemeine Java-Themen 12
S Executable Jar File startet nicht unter Windows 10 Allgemeine Java-Themen 3
B Objekte anhand von Properties file Allgemeine Java-Themen 41
Dechasa Input/Output Write into File Allgemeine Java-Themen 2
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
H Security Manager (IIOException: Can't read input file!) Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
C Input/Output Problem bei Datei verschiebung mit File.move und Paths.get() Allgemeine Java-Themen 26
F Open source file übersetzen Phython -> Java Allgemeine Java-Themen 4
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
M Desktop jar File icon Ändern? Allgemeine Java-Themen 14
O Sax-Parser ließt XML-File doppelt Allgemeine Java-Themen 1
J Java Software Compare Files und Neue File erstellen Allgemeine Java-Themen 0

Ähnliche Java Themen

Neue Themen


Oben