Änderung in einer Datei

Hallo,

mein Problem ist es, das ich Dateien durchsuchen will, ob sie einen bestimmten Inhalt haben. Ist dies der Fall, soll alles bis auf eben diesen Inhalt neu geschrieben werden. Der ursprüngliche Dateiname, soll aber gleiche bleiben.
Leider klappt es nicht so wie ich das will.

Java:
/**
 * @author Administrator
 *
 */
public class LöscheWortAusBezThread implements Runnable {

	private int id;
	private File dir;
	private IDFilter filter;
	
	
	public LöscheWortAusBezThread(int id, File dir) {
		this.id  = id;
		this.dir = dir;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	@Override
	public void run() {
		// TODO Auto-generated method stub
		File[] files = null;  //////////////////////////////!!!!!!!!!!!!!!////////////////////////
		filter       = new IDFilter(id);
		files        = dir.listFiles(filter);
		ArrayList<Integer> indizes = new ArrayList<Integer>();
		ArrayList<String>  strings = new ArrayList<String>();
		
		for(File f : files) {
			try {
				BufferedReader reader = new BufferedReader(new FileReader(f));
				String zeile = null;
				while((zeile = reader.readLine()) != null) {
					strings.add(zeile);
				}
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		for(int i = 0; i < (strings.size()-1); i++) {
			int zeileStr = Integer.parseInt(strings.get(i));
			Integer zeileInt = new Integer(zeileStr);
			indizes.add(zeileInt);
		}
		
		for(Integer i : indizes) {
			String indexStr = String.valueOf(id);
			filter = new IDFilter(i);
			File[] dateien = dir.listFiles(filter);
			for(File f : dateien) {
				try {
					File file = new File("kopie");
					BufferedReader reader = new BufferedReader(new FileReader(f));
					BufferedWriter writer = new BufferedWriter(new FileWriter("WörterBeziehung/" + file));
					String zeile;
					while((zeile = reader.readLine()) != null) {
						if(!zeile.equals(indexStr))
							writer.write(zeile);
					}
					reader.close();
					writer.close();
					f.delete();
					file.renameTo(new File("WörterBeziehung/" + f));	
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

Dieses renameTo() klappt nicht, es entsteht einfach eine neue Datei "kopie" die zwar den richtigen Inhalt hat, aber eben den falschen Name u die Schleife wird nur einmal vollzogen, zum jetzigen Zeitpunkt müsste es aber mind. 2 mal durchlaufen werden, für 2 Dateien. ???:L
 
Hallo,
warscheinlich liegt dein probleme darin das du deine neue datei mit

Java:
File file = new File("kopie");
kopie genannt hast und anschließend versuchst aus der gelöschten datei den Namen zu bekommen.
Du könntest diese Problem lösen indem du
Java:
File file = new File(f.getName());
machst anstatt "kopie".
 
ja das klappt, wenn ich es nicht im selben Ordner mache, mache ich es im selben Ordner, verschwindet die Datei einfach.
Was beachte ich hierbei nicht?? "am kopf kratz"
 
f und file zeigen auf die selbe Datei wenn du es im selben Ordner machst. Rufst du also f.delete() auf ist auch file gelöscht... f und file müssen entweder einen anderen Namen haben oder in unterschiedlichen Ordnern sein...

Speicher dir doch einfach den richtigen Namen in einen String und nenn file "kopie"...
 
an sich ganz simpel, ich speichere vor dem löschen der alten datei, einfach ihren name ab u nutze diesen dann bei renameTo() 😀

aber jetzt nochmal dazu, warum die schleife nur einmal durchlaufen wird, obwohl "indizes" die größe 2 hat ???
 
Weiss nicht ob es daran liegt, aber die Zeile sieht merkwürdig aus:
Java:
for(int i = 0; i < (strings.size()-1); i++) {
dadurch wird das letzte Element in Strings nich durchlaufen, ist das Absicht?
 
Java:
while((zeile = reader.readLine()) != null) {
					strings.add(zeile);
				}

hier bekomm ich 3 werte 2 "echte" und einmal "null", deswegen schneide ich es ab, aber ich teste es direkt mal mit einer ausgabe...
 
mh ah ok, ich lass das -1 weg u es klappt...ich weiß glaube woran es lag, es wurde eine leere zeile gespeichert, die hat es wohl mit aufgenomme beim letzten mal, sehr empfindlich was letzte zeilen angeht 🙂
 

Neue Themen


Zurück
Oben