Input/Output Testen ob Datei leer

henpara

Bekanntes Mitglied
Hallo,
ich habe eine Methode geschrieben, die testen soll, ob eine Datei leer ist:
Java:
	private boolean isEmpty(File file) throws IOException {
		File test = file;
		FileReader fr = new FileReader(test);
		BufferedReader br = new BufferedReader(fr);
		String empty = br.readLine();
		br.close();
		fr.close();
		if (empty == null)
			return true;
		else if (empty.isEmpty())
			return true;
		else 
			return false;
	}

Wenn ich das mit einer Test-datei mache, funktioniert auch alles einwandfrei.
Wenn ich sie in mein Programm einbinde, werden aber alle Dateien immer als empty angezeigt, obwohl sie definitiv "vorher" nicht leer waren.

Hier mal der Code der Klasse:
Java:
package common;


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

import log.Log;

public class Checks {
	ArrayList<String> dnafileList;
	ArrayList<String> dnafolderList;

	public Checks ( ) {
		
		dnafileList = new ArrayList<String>();
		dnafolderList = new ArrayList<String>();

		fillArrayLists();
		checkDnaDis();
	}
	private void fillArrayLists() {

		dnafileList.add(GlobalVariables.getVal(Programms.DnaDis, "OutputFile"));

		dnafolderList.add(GlobalVariables.getVal(Programms.DnaDis, "SqlPath"));
		dnafolderList.add(GlobalVariables.getVal(Programms.DnaDis, "OutPath"));
		dnafolderList.add(GlobalVariables.getVal(Programms.DnaDis, "LastOutPath"));
	}
	
	
	
	
	private void checkDnaDis() {
		// TODO Auto-generated method stub
		for (Iterator<String> iter = dnafolderList.iterator(); iter.hasNext();) {
			String file = iter.next();
			checkfolder(new File(file));
		}
		for (Iterator<String> iter = dnafileList.iterator(); iter.hasNext();) {
			String file = iter.next();
			checkfile(new File(file), common.Programms.DnaDis);
		}
	}
	private boolean checkfolder (File outfolder) {
		//Alle Ordner checken und ggf neu erstellen (Out-Folder):
		if (!outfolder.exists()) {
			outfolder.mkdir();
			return true;
		}
		return false;
	}
	private boolean checkfile(File file, common.Programms pg) {
		if (!file.exists()) {
			try {
				file.createNewFile();
				return true;
			} catch (IOException e) {
				Log.log("Logfile " + file + " konnte nicht erstellt werden" + GlobalVariables.getVal("lsep"));
				e.printStackTrace();
				return false;
			}
		} else {
			System.out.println(file + " existierte schon, check ob leer!");
			try {
				if (pg != null && !isEmpty(file)) {
					moveFile(file, pg);
				}
				System.out.println(isEmpty(file)); //hier wird bei isEmpty immer true geliefert, egal ob die Datei leer ist oder nicht.
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			//System.out.println(file.getAbsolutePath() + " wird nun gelöscht");
			try {
				file.delete(); // Das löschen und neu erstellen soll NACH dem verschieben passieren.
				file.createNewFile();
				return true;
			} catch (IOException e) {
				Log.log("Logfile " + file + " konnte nicht erstellt werden" + GlobalVariables.getVal("lsep"));
				e.printStackTrace();
				return false;
			}
		}
	}
	private boolean isEmpty(File file) throws IOException { //funktionert in Testprogramm
		File test = file;
		FileReader fr = new FileReader(test);
		BufferedReader br = new BufferedReader(fr);
		String empty = br.readLine();
		br.close();
		fr.close();
		if (empty == null)
			return true;
		else if (empty.isEmpty())
			return true;
		else 
			return false;
	}
	private void moveFile(File file, Programms pg) { //kann noch fehlerbehaftet sein, da die Methode noch nie erfolgreich aufgerufen wurde, hab ich dort noch nicht getestet.
		System.out.println("moveFile wird aufgerufen mit " + file);
		switch (pg) {
		case DnaDis: {
			//Dateien verschieben
			//Dateien über Java zu verschieben ist relativ einfach, nämlich zum Beispiel so:
			try {
				File quellDatei = new File(file.getAbsolutePath());
				System.out.println(file.getAbsolutePath());
				File zielDatei = new File(common.GlobalVariables.getVal(common.Programms.DnaDis, "LastOutPath") + file.getName());
				quellDatei.renameTo(zielDatei);
				//file.createNewFile();
				Log.log(file.getName() + " erfolgreich gespeichert nach " + zielDatei.getAbsolutePath());
			} catch (Exception e) {
				e.printStackTrace();
			}
			break;
		}
		case MTx: {
			//Dateien verschieben
			//Dateien über Java zu verschieben ist relativ einfach, nämlich zum Beispiel so:
                       // wie man sieht hab ich das Verschieben ausm Netz Copy-Pasted.
			try {
				File quellDatei = new File(file.getAbsolutePath());
				File zielDatei = new File(common.GlobalVariables.getVal(common.Programms.MTx, "LastOutPath") + file.getName());
				quellDatei.renameTo(zielDatei);
				//file.createNewFile();
				Log.log(file.getName() + "erfolgreich verschoben nach " + zielDatei.getAbsolutePath());
			} catch (Exception e) {
				e.printStackTrace();
			}
			break;
		}
		case RepMM: {
			//Dateien verschieben
			//Dateien über Java zu verschieben ist relativ einfach, nämlich zum Beispiel so:
			try {
				File quellDatei = new File(file.getAbsolutePath());
				File zielDatei = new File(common.GlobalVariables.getVal(common.Programms.RepMM, "LastOutPath") + file.getName());
				quellDatei.renameTo(zielDatei);
				//file.createNewFile();
				Log.log(file.getName() + "erfolgreich verschoben nach " + zielDatei.getAbsolutePath());
			} catch (Exception e) {
				e.printStackTrace();
			}
			break;
		}
		case Xtractor: {
			//Dateien verschieben
			//Dateien über Java zu verschieben ist relativ einfach, nämlich zum Beispiel so:
			try {
				File quellDatei = new File(file.getAbsolutePath());
				File zielDatei = new File(common.GlobalVariables.getVal(common.Programms.Xtractor, "LastOutPath") + file.getName());
				quellDatei.renameTo(zielDatei);
				//file.createNewFile();
				Log.log(file.getName() + "erfolgreich verschoben nach " + zielDatei.getAbsolutePath());
			} catch (Exception e) {
				e.printStackTrace();
			}
			break;
		}
}
	}
}

Die Hoffnung stirbt zu Letzt, ich finde einfach nicht, warum das isEmpty() im einer Test-Main- Umgebung problemlos funktioniert, aber im Programm eingebettet eben nicht :(.

Danke schonmal für hilfreiche Antworten

mfG
henpara

€Ich lese absichtlich nur die erste Zeile, weil die Dateien, die es betrifft, sind entweder "ganz" befüllt oder garnicht (sind nur Textdateien).

@Guardi: Ich versteh dich nicht ganz, zum "moveFile()" kommt er doch garnicht erst, weil isEmpty immer true zurückliefert.
 
Zuletzt bearbeitet:

Guardi

Bekanntes Mitglied
Da hast du natürlich Recht, hab das beim Überfliegen übersehen.
Schau mal bitte nach was der Grund dafür ist, dass true zuürckkommt.
Also ob empty = null oder ob is.Empty = true der Grund ist.
 

henpara

Bekanntes Mitglied
Da hast du natürlich Recht, hab das beim Überfliegen übersehen.
Schau mal bitte nach was der Grund dafür ist, dass true zuürckkommt.
Also ob empty = null oder ob is.Empty = true der Grund ist.
Das kann ich dir sagen: Ich lass mir den String ja ausgeben und der is immer null.
also gibt empty = null den Ausschlag.

mfg und thx schonmal fürs drüberschauen!
 
S

Spacerat

Gast
Sicher, dass dort ausschliesslich Textdateien geprüft werden sollen oder aus welchem Grund wird dort FileReader verwendet? Also die Klasse File verfügt schon mal über die Methoden "isFile()" und "length()". Demnach könnte deine Methode so aussehen:
[Java]private boolean isEmpty(File file)
{
if(file != null) {
return file.isFile() && file.length() == 0;
}
return true;
}[/code]
 

henpara

Bekanntes Mitglied
Sicher, dass dort ausschliesslich Textdateien
Ja da bin ich sicher.

Werd deinen Hinweis mal umsetzen -thx dafür.

€Habs umgesetzt, wieder das gleiche Problem: In meiner TestKlasse mit Main Methode funktioniert das ganze einwandfrei, im Programm (Klasse siehe erster Post) liefert er bei der gleichen Datei trotzdem das andere falsche Ergebnis.

Ich kapiers einfach nicht, ich änder doch an der Datei garnichts, wie kann einmal true und einmal false mit der gleichen Methode zurückkommen - richtig garnicht, leider seh ich nicht, wo der Unterschied ist, bzw. woher der Unterschied kommt :(
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Okay, denn könnt's möglicherweise noch daran liegen, dass "file" nicht gefunden wird. In diesem Fall müssten absolute Pfade verwendet werden. In der Methode (meine Version oder deine ist dabei egal) müsste dann noch als erste Zeile
Java:
file = file.getAbsoluteFile();
eingefügt werden.
 

henpara

Bekanntes Mitglied
File nicht gefunden kann ich auch ausschließen, siehe auch die Klasse:
Java:
private boolean checkfile(File file, common.Programms pg) {
		if (!file.exists()) {
			try {
				file.createNewFile();
				return true;
			} catch (IOException e) {
				Log.log("Logfile " + file + " konnte nicht erstellt werden" + GlobalVariables.getVal("lsep"));
				e.printStackTrace();
				return false;
			}
		} else {
			System.out.println(file + " existierte schon, check ob leer!");
			try {
				if (pg != null && !isEmpty(file)) {
					moveFile(file, pg);
				}
				System.out.println(isEmpty(file));
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			//System.out.println(file.getAbsolutePath() + " wird nun gelöscht");
			try {
				file.delete();
				file.createNewFile();
				return true;
			} catch (IOException e) {
				Log.log("Logfile " + file + " konnte nicht erstellt werden" + GlobalVariables.getVal("lsep"));
				e.printStackTrace();
				return false;
			}
		}
	}

Und die Datei wird schon mit relativer Pfadangabe eingegeben.
 
S

Spacerat

Gast
"schon mit relativer Pfadangabe" ist gut ;) deswegen solltest du es ja mit den absoluten Pfaden testen. Ich nehme mal stark an, dass diese auf verschiedene Dateien zeigen.
 

r.w.

Bekanntes Mitglied
Was spricht dagegen in isempty(...) einfach mal den Pfad auf die Konsole auszugeben,
um zu sehen welche Datei tatsächlich geprüft wird?

VG ROlf
 

henpara

Bekanntes Mitglied
Was spricht dagegen in isempty(...) einfach mal den Pfad auf die Konsole auszugeben,
um zu sehen welche Datei tatsächlich geprüft wird?
wird doch schon getan

Java:
System.out.println(file + " existierte schon, check ob leer!");
und es sind die richtigen Dateien, das ist ja das komische :/

Es wird ja sogar vorher geprüft ob die Dateien überhaupt existieren, und das tun sie.

Es gibt also die Dateien, aber irgendwie müssen sie vorher gelöscht oder sonstwie verändert worden sein, anders kann ich mir das nicht erklären, daß isEmpty leer anzeigt, obwohl vor dem Start des Programms die dateien nicht leer sind.
 

Guardi

Bekanntes Mitglied
Naja da empty==null kann es nur daran liegen dass der BufferedReader nichts finden kann was er lesen könnte.
readLine liefer null wenn das Ende des Streams erreicht ist. Demzufolge sind deine Dateien wohl definitiv leer.

Vielleicht fängt das Problem ja schon damit an, dass checkFile IMMER false liefert.
 

henpara

Bekanntes Mitglied
"schon mit relativer Pfadangabe" ist gut deswegen solltest du es ja mit den absoluten Pfaden testen. Ich nehme mal stark an, dass diese auf verschiedene Dateien zeigen.
Beides probiert, beides hat in der Testklasse funktioniert.
Und in anderen Klassen schreibe ich in die Files und das funktioniert ja auch, also der File-String zeigt definitiv auf das richtige File.
 
S

Spacerat

Gast
Oh man sind wir eigentlich alle - und da schliesse ich mich keineswegs aus - blind? Okay... Guardi hat es ja bereits angedeutet. "moveFile()" ist das Problem! Da wird aus dem übergebenen Fileobjekt ein neues mit dem Namen "quelldatei" erstellt und dieses dann anschliessend per "renameTo()" umbenannt. Davon bekommt das ursprüngliche Fileobjekt natürlich herzlich wenig mit und behält deswegen auch den Namen der eben verschobenen Datei. Klar, dass "isEmpty()" auf das unveränderte Fileobjekt dadurch im Folgenden "true" liefert.
[JAVA=12] System.out.println(file + " existierte schon, check ob leer!");
try {
boolean empty = isEmptyFile(file);
if (pg != null && !empty) {
moveFile(file, pg);
}
System.out.println(empty);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}[/code]Versuch's halt so.
...und in Zukunft merken wir uns, dass ein Objekt des Typs File in keinster Weise mit der darin benannten Datei fest verbunden ist ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Programm mit Daten einer Datei testen Java Basics - Anfänger-Themen 4
G *.java Datei mit Editor starten und testen Java Basics - Anfänger-Themen 6
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
U JUnit testen auf SomeException Java Basics - Anfänger-Themen 5
U Sortierung in collections testen Java Basics - Anfänger-Themen 11
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
T Kann jemand kurz das Programm testen? Java Basics - Anfänger-Themen 13
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
J Womit kann ich diese Methode testen? Java Basics - Anfänger-Themen 5
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
K Testen in BlueJ Java Basics - Anfänger-Themen 2
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
G Testen mit JUnit Java Basics - Anfänger-Themen 4
J Worte auf Gültigkeit bzgl. Alphabet testen Java Basics - Anfänger-Themen 1
T OOP Zwei Klassen Testen (Arrary Iterieren) Java Basics - Anfänger-Themen 6
A IllegalArgumentException in JUnit testen Java Basics - Anfänger-Themen 3
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
K Testen von Methoden Java Basics - Anfänger-Themen 5
kilopack15 Java Array Skalarprodukt testen Java Basics - Anfänger-Themen 21
K Testen von Methoden Java Basics - Anfänger-Themen 1
R Teilinhalt eines Strings testen Java Basics - Anfänger-Themen 10
S File mit canRead() testen Java Basics - Anfänger-Themen 4
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
I Programm testen, aber wie? Java Basics - Anfänger-Themen 14
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
W Testen auf Existenz des Verzeichnisses Java Basics - Anfänger-Themen 4
M Wie private Methoden mit Asserstions testen? Java Basics - Anfänger-Themen 3
P OOP Testen ob 2 Strings gleich sind Java Basics - Anfänger-Themen 8
B Void Mehoden Testen Java Basics - Anfänger-Themen 13
G Java Applet aus Eclipse heraus testen? Java Basics - Anfänger-Themen 6
E Arrays testen Java Basics - Anfänger-Themen 4
D Assertion Error beim Testen Java Basics - Anfänger-Themen 4
T Junit --Exception testen Java Basics - Anfänger-Themen 15
S Sortierverfahren - wie Stabilität testen (im array) Java Basics - Anfänger-Themen 3
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
B Testen eines Bridge-Spiels Java Basics - Anfänger-Themen 5
W Mit jUnit Array testen? Java Basics - Anfänger-Themen 5
Spin JUNIT Test Case - Problem bei testen Java Basics - Anfänger-Themen 2
C Methode Testen Java Basics - Anfänger-Themen 12
J Programm in main Methode testen Java Basics - Anfänger-Themen 29
C Klammerung testen Java Basics - Anfänger-Themen 10
turmaline JUnit testen ob keine Exception auftritt Java Basics - Anfänger-Themen 23
xehpuk In JUnit über eigenen Thread testen Java Basics - Anfänger-Themen 3
? Fehler bei Testen Java Basics - Anfänger-Themen 17
vandread Internationalisierung von einem Projekt testen? Java Basics - Anfänger-Themen 2
F Interface Testen Java Basics - Anfänger-Themen 5
T Methoden Testen und schaun ob richtiges Ergebnis? Java Basics - Anfänger-Themen 5
J Testen Java Basics - Anfänger-Themen 3
Houly Setter/Getter MEthoden testen Java Basics - Anfänger-Themen 4
B OOP Testen - JUnit Java Basics - Anfänger-Themen 30
J Hash-Maps / ArrayLists testen Java Basics - Anfänger-Themen 12
G netzwerkapplikationen testen Java Basics - Anfänger-Themen 7
S Testen ob ein String ein Datum ist. Java Basics - Anfänger-Themen 5
T Testen ob eine Zahl im array doppel vorkommt. Java Basics - Anfänger-Themen 7
reno Testen ob String leer ist Java Basics - Anfänger-Themen 12
G testen ob int gleich null Java Basics - Anfänger-Themen 15
G testen ob in String zahl Java Basics - Anfänger-Themen 10
K Program Testen mit Macintosh Java Basics - Anfänger-Themen 2
F Testen ob Double-Variable Java Basics - Anfänger-Themen 13
G SSL Verbindung testen? Java Basics - Anfänger-Themen 1
G Methoden mit Junit testen? Java Basics - Anfänger-Themen 2
M Kostenloser webspace zum testen von Javaprogrammen ? Java Basics - Anfänger-Themen 3
A mit Junit testen Java Basics - Anfänger-Themen 7
G Baum testen Java Basics - Anfänger-Themen 20
H Testen, ob Thread schläft Java Basics - Anfänger-Themen 3
S Testen ob ein Char Array noch nicht belegt ist! Java Basics - Anfänger-Themen 3
M Testen ob ein Sample noch abgespielt wird Java Basics - Anfänger-Themen 6
G wie eine selbstgeschriebene Klasse testen? Java Basics - Anfänger-Themen 15
P programm testen ohne main-funktion Java Basics - Anfänger-Themen 19
B Klammerung testen Java Basics - Anfänger-Themen 12
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49

Ähnliche Java Themen

Neue Themen


Oben