Hallo,
ich habe eine Methode geschrieben, die testen soll, ob eine Datei leer ist:
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:
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.
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: