kostenloser Webspace werbefrei: lima-city


Datei löschen

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    tueddel

    tueddel hat kostenlosen Webspace.

    Hallo,

    ich will mit java eine tag/datei">Datei löschen. Hört sich eigentlich einfach an, aber irgendwie klappt das nicht so wie ich will.
    Erstemal normalerweise hat das bei mir immer mit delete() geklappt und ich dachte ich hätte diesmal nichts anders gemacht.
    Leide bekomme ich immer nur ein false zurückgegeben, keine andere Fehlermeldung. NICHTS.

    So und jetzt meine Frage:
    Woran kann es liegen das eine Datei nicht gelöscht werden kann. Muss ich noch irgendwas vorbereiten? Könnte noch ein Verweis oder ähnliches stören?

    Wäre super wenn ihr mir sagen könntet wo das Problem liegen könnte und was ich machen muss damit es verschwindet.

    MFG
    Tueddel
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Moin,

    Also generell kann eine Datei nur gelöscht werden, wenn nichts und niemand einen Zugriff wagt.
    Da Du also keine SecurityException bekommst - die normal geworfen wird, wenn keine Rechte verfügbar sind,
    kann es wohl nur daran liegen, dass von irgendwoher ein Zugriff erfolgt.

    Kannst Du mal bitte entsprechenden Code posten, die Glaskugel nützt in diesem Fall nämlich nichts,
    da das Problem spezifisch zu sein scheint.

    Gruß,
    Pawnee
  4. Hi,

    wie so oft scheint mir die Sache ohne Code nur mit Kristallkugel lösbar.
    Falls also niemand dein Problem lösen kann, poste doch einfach mal
    mehr Infos und ich versuche mein Glück.

    Gruß
    Manni
  5. Autor dieses Themas

    tueddel

    tueddel hat kostenlosen Webspace.

    ersmal danke für die antwort also dann sollten das eigentlich die einzigen beiden klassen sein die zugriff auf die datei bekommen:
    import java.io.*;
    import java.util.ArrayList;
    import org.eclipse.swt.*;
    import org.eclipse.swt.widgets.*;
    import org.eclipse.swt.events.*;
    import org.farng.mp3.TagException;
    
    public class Hauptfenster implements SelectionListener, FocusListener {
    	private Display display;
    	private Shell shell;
    	private Sortierer sort;
    	private FehlerFenster ff;
    	private ArrayList<Lied> lieder;
    	private String zielpfad;
    	private Button bHin, bEnt, bZiel, bStart, bOpt, bId3;
    	private List list;
    	private Text tZielpfad;
    	
    	public static void main(String[] args){
    		new Hauptfenster();
    	}
    	
    	public Hauptfenster(){
    		//Initialisierung der Attribute
    				
    		lieder = new ArrayList<Lied>();	
    		
    		//DER BILDSCHIRM
    		display = new Display();
    		
    		//Eigenschaften von shell festlegen
    		//noch in die Mitte setzten
    		shell = new Shell(display);
    		shell.setBounds(0, 0, 500, 500);
    		shell.setText("Musiksortierer");
    		
    		//Widgets in shell (aus SWTFactory)
    					SWTFactory.createLabel(shell, "Dateien", SWT.LEFT, 50, 50, 50, 24);
    		list = 		SWTFactory.createList(shell, null, 50, 80, 200, 200);
    		bHin = 		SWTFactory.createNormalButton(shell, "Hinzufügen", 300, 80, 110);
    		bEnt = 		SWTFactory.createNormalButton(shell, "Entfernen", 300, 130, 110);
    					SWTFactory.createLabel(shell, "Zielpfad", SWT.LEFT, 50, 300, 50, 24);
    		tZielpfad = SWTFactory.createTextField(shell, "", 50, 330, 0, 200);
    		bZiel = 	SWTFactory.createNormalButton(shell, "Durchsuchen", 300, 330, 110);
    		bStart = 	SWTFactory.createNormalButton(shell, "Start", 50, 390, 200);
    		bOpt = 		SWTFactory.createNormalButton(shell, "Optionen", 300, 390, 110);
    	//	bId3 = SWTFactory.createNormalButton(shell, "Id3-Editor", 300, 160, 110);
    		
    		tZielpfad.addFocusListener(this);
    		
    		bHin.addSelectionListener(this);
    		bEnt.addSelectionListener(this);
    		bZiel.addSelectionListener(this);
    		bStart.addSelectionListener(this);
    		bOpt.addSelectionListener(this);
    		//bId3.addSelectionListener(this);
    		
    		ff = new FehlerFenster(display,this,sort);
    		
    		//Initialisierung des Sortierers (laden o. neu erstellen)
    		try {
    			FileInputStream fis = new FileInputStream("Sortierer");
    			ObjectInputStream ois = new ObjectInputStream(fis);
    			sort = (Sortierer)(ois.readObject());
    			ois.close();
    			fis.close();
    			
    			if (sort.getZielpfad()!=null)
    				this.setZielpfad(sort.getZielpfad());
    		}
    		catch(IOException e){
    			sort = new Sortierer();
    			sort.speichern();
    			zielpfad = "";
    		}
    		catch(ClassNotFoundException e){
    			SWTFactory.createError(shell, "Fehlerhafte Sortiererdatei");
    			//alte Datei löschen und neuen sortierer erstellen
    		}
    		
    		//shell darstellen
    		shell.open();
    		
    		while(!shell.isDisposed()){
    			if(!display.readAndDispatch())
    				display.sleep();
    		}
    		display.dispose();	
    	}
    	
    	public void focusGained(FocusEvent e){}
    	public void focusLost(FocusEvent e){
    		Object src = e.getSource();
    		
    		if(src == tZielpfad){
    			sort.setZielpfad(tZielpfad.getText());
    		}
    	}
    	
    	public void widgetDefaultSelected(SelectionEvent e){}
    	public void widgetSelected(SelectionEvent e){
    		Object src = e.getSource();
    		
    		if (src == bHin){
    			this.hin();
    		}
    		else if (src == bEnt){
    			this.ent();
    		}
    		else if (src == bZiel){
    			this.ziel();
    		}
    		else if (src == bStart){
    			this.sortieren();			
    		}
    		else if (src == bOpt){
    			new Optionsfenster(display,sort);
    		}
    		else if(src == bId3){
    			//new Id3Editor(shell,ff,lieder.get(0).getPath());
    		}
    		
    	}
    	
    	private void hin(){
    		FileDialog fd = new FileDialog(shell,SWT.OPEN|SWT.MULTI);
    		fd.setFilterPath("C:/");
    		fd.open();
    
    		String filterPath = fd.getFilterPath();
    		String[] auswahl = fd.getFileNames();
    		Shell bar = new Shell(shell);
    		bar.setBounds(215, 175, 300, 100);
    		ProgressBar pb = SWTFactory.createProgressBar(bar,10,10,260,30, auswahl.length, 0);
    		SWTFactory.createLabel(bar, "Aktuelle Datei:", SWT.NONE, 10, 50, 70, 20);
    		Label aktuell = SWTFactory.createLabel(bar, "", SWT.NONE, 85, 50, 200, 20);
    		bar.open();
    			for(int i=0; i<auswahl.length; i++){
    				File test = new File(filterPath+"\\"+auswahl[i]);
    					try{
    						if(!pb.isDisposed()){
    							pb.setSelection(i);
    							aktuell.setText(auswahl[i]);
    						}
    						lieder.add(new Lied(test));
    						list.add(auswahl[i]);
    					}
    					catch(IOException e){
    						ff.add(filterPath+"\\"+auswahl[i],FehlerFenster.IO);
    						ff.open();
    					}
    					catch(UnsupportedOperationException e){
    						ff.add(filterPath+"\\"+auswahl[i],FehlerFenster.UNSUPPORTED);
    						ff.open();
    					}
    					catch(TagException e){	
    						ff.add(filterPath+"\\"+auswahl[i],FehlerFenster.TAG);
    						ff.open();
    					}
    					catch(SWTException e){
    						SWTFactory.createError(shell, "Fatal Error, stop loading");
    					}
    			}
    			bar.close();
    	}
    	
    	private void ent(){
    		try{
    			if(list.getSelectionIndex()>=0){
    				int[] auswahl = list.getSelectionIndices();
    				list.remove(auswahl[0], auswahl[auswahl.length-1]);
    				for(int i=0; i<auswahl.length-1; i++){
    					lieder.remove(auswahl[i]);
    				}
    			}
    		}
    		catch(IndexOutOfBoundsException e){
    			SWTFactory.createError(shell, "Entfernen fehlgeschlagen");
    		}
    	}
    		
    	private void ziel(){
    		DirectoryDialog dd = new DirectoryDialog(shell);
    		dd.open();
    		this.setZielpfad(dd.getFilterPath());
    	}
    	
    	private void sortieren(){
    		Shell bar = new Shell(shell);
    		bar.setBounds(215, 175, 300, 100);
    		ProgressBar pb = SWTFactory.createProgressBar(bar,10,10,260,30, lieder.size(), 0);
    		SWTFactory.createLabel(bar, "Aktuelle Datei:", SWT.NONE, 10, 50, 70, 20);
    		Label aktuell = SWTFactory.createLabel(bar, "", SWT.NONE, 85, 50, 200, 20);
    		bar.open();
    			try{
    				for(int i=0; i<lieder.size(); i++){
    					sort.sortieren(lieder.get(i));
    					if(!pb.isDisposed()){
    						pb.setSelection(i);
    						aktuell.setText(lieder.get(i).getName());
    					}
    				}
    				bar.close();
    				list.removeAll();
    			}
    			catch (MissingArgumentException e){
    				e.printStackTrace();
    				SWTFactory.createWarning(shell, "Bitte stellen Sie die Optionen korrekt ein.");
    			}
    	}	
    		
    	//Set-/ Get-Methoden
    	public void setZielpfad(String pZielpfad){
    		zielpfad = pZielpfad;
    		sort.setZielpfad(zielpfad);
    		tZielpfad.setText(zielpfad);
    	}
    	public String getZielpfad(){ return zielpfad; }
    	public ArrayList<Lied> getLieder(){ return lieder; }
    	//FensterInfos
    	public int getHeight(){return shell.getSize().y;}
    	public int getWidth(){return shell.getSize().x;}
    	public int getX(){return shell.getLocation().x;}
    	public int getY(){return shell.getLocation().y;}
    }


    und

    import org.eclipse.swt.*;
    import org.eclipse.swt.widgets.*;
    import org.eclipse.swt.events.*;
    import org.farng.mp3.TagException;
    import java.io.*;
    import java.util.HashMap;
    
    public class FehlerFenster implements SelectionListener  {
    	public static final int NULLPOINTER = 0;
    	public static final int IO			= 1;
    	public static final int UNSUPPORTED = 2;
    	public static final int TAG			= 3;
    	public static final int UNKNOWN 	= 4;
    	
    	private class Fehler{
    		
    		private String datei;
    		private int typ;
    		
    		public Fehler(String pDatei, int pTyp){
    			datei=pDatei;
    			typ=pTyp;
    		}
    		
    		public String getDatei(){
    			return datei;
    		}
    		
    		public int getTyp(){
    			return typ;
    		}
    
    		public String toString(){
    			String s;
    			switch(typ){
    				case NULLPOINTER: 								//fallthrough
    				case IO: s = "loading error"; break;
    				case UNSUPPORTED: s = "unsupported operation"; break;
    				case TAG: s = "missing ID3-Tag";
    				default: s = "unknown error";
    			}
    			return s;
    		}
    		
    	}
    	
    	private Shell shell, io;
    	private Table table;
    	private TableColumn pfad, art;
    	private Button bBearbeite;
    	private HashMap<Integer,Fehler> fehler;
    	private Sortierer sort;
    	private Text tPfad;
    	private Button bSuch, bOk, bDel;
    	
    	
    	public FehlerFenster(Display display,Hauptfenster owner, Sortierer pSort){
    		shell = new Shell(display);
    		shell.setBounds(owner.getX(), owner.getY()+owner.getHeight(), 500, 200);
    		shell.setText("Fehler");
    		
    		table = new Table(shell, SWT.MULTI | SWT.BORDER);
    		table.setBounds(0, 0, 395, 200);
    		table.setLinesVisible(true);
    		
    		pfad = new TableColumn(table, SWT.NONE);
    		art = new TableColumn(table, SWT.NONE);
    		
    		bBearbeite = SWTFactory.createNormalButton(shell, "Bearbeiten", 400, 50, 100);
    		bDel = SWTFactory.createNormalButton(shell, "Datei löschen", 400, 98, 100);
    		
    		bBearbeite.addSelectionListener(this);
    		bDel.addSelectionListener(this);
    		
    		fehler=new HashMap<Integer,Fehler>();
    		
    	}
    	
    	public void open(){
    		pfad.pack();
    		art.pack();
    		shell.pack();
    		shell.open();
    	}
    	
    	public void add(String datei, int typ){
    		TableItem ti = new TableItem(table, SWT.NONE);
    		Fehler f = new Fehler(datei,typ);
    		fehler.put(fehler.size(), f);
    		ti.setText(new String[]{datei,f.toString()});
    	}
    	
    	public void widgetDefaultSelected(SelectionEvent e){}
    	public void widgetSelected(SelectionEvent e){
    		Object src = e.getSource();
    		if (src == bBearbeite){
    			this.bearbeiten();
    		}
    		else if (src == bSuch){
    			FileDialog fd = new FileDialog(shell,SWT.OPEN);
    			fd.open();
    			tPfad.setText(fd.getFilterPath()+"\\"+fd.getFileName());
    		}
    		else if(src == bOk){
    			this.ok();
    		}
    		else if(src == bDel){
    			this.loesche();
    		}
    	}
    	
    	//Fehlerbehebfunktionen
    	private void bearbeiten(){
    		if (table.getSelectionIndex()>=0){
    			Fehler f = fehler.get(table.getSelectionIndex());	
    			switch (f.getTyp()){
    				case NULLPOINTER: 								//fallthrough
    				case IO: this.io(); break;				//Dateipfad neu angeben o. löschen
    				case UNSUPPORTED:break; 
    				case TAG: new Id3Editor(shell,this,fehler.get(table.getSelectionIndex()).getDatei()); break;//ID3-Editor
    				default: 
    			}
    		}
    	}
    	
    	private void ok(){
    		try {
    			sort.sortieren(new Lied(tPfad.getText()));
    			table.clear(table.getSelectionIndex());
    		}
    		catch(MissingArgumentException mae){
    			SWTFactory.createWarning(shell, "Bitte stellen Sie die Optionen korrekt ein.");
    		}
    		catch(TagException te){
    			this.add(tPfad.getText(), TAG);
    		}
    		catch(IOException ioe){
    			this.add(tPfad.getText(), IO);
    		}
    		io.close();
    	}
    	
    	
    	private void io() {
    		io = new Shell(shell);
    		io.setText("loading error");
    		io.setBounds(0, 0, 250, 100);
    		
    	    tPfad = SWTFactory.createTextField(io, "Dateipfad: ", 5, 5, 50, 100);
    		bSuch = SWTFactory.createNormalButton(io, "...", 157, 1, 20);
    		bOk = SWTFactory.createNormalButton(io, "Bestätigen", 145, 40, 100);
    			
    		bSuch.addSelectionListener(this);
    		bOk.addSelectionListener(this);
    		
    		io.open();
    	}
    	
    	private void loesche(){
    		if (table.getSelectionIndex()>=0){
    			Fehler f = fehler.get(table.getSelectionIndex());
    			fehler.remove(table.getSelectionIndex());
    			File del = new File(f.getDatei());
    			boolean d=del.delete();
    			System.out.print(d);
    		}
    	}
    
    }


    da zum erscheinen der datei im Fehlerfenster erstmal überhaupt ein fehler passieren muss sollten die Klassen die für den weiteren korrekten ablauf benötigt werden nichts von der falschen Datei wissen, von daher können die denk ich mal nicht schuld am Problem sein.
  6. Hi,

    also beim Druchlesen deines Codes kann ich gerade keinen Fehler entdecken. Zum Testen fehlen mir ja einige Klassen. Ich würde mir mal ansehen, was da gelöscht werden soll. Nach Belegung der Variable "del" also mal den (absoluten) Pfad ausgeben lassen und die Eigenschaften "canRead" und "canWrite". Das geht natürlich auch im Debug Mode von Eclipse. Wenn du echt nicht weiter kommst, kannst du mir auch das ganze Projekt mal schicken (z.B. auf deinem Webspace bereistellen) damit ich es mal insgesamt testen kann.

    Gruß
    Manni
  7. Autor dieses Themas

    tueddel

    tueddel hat kostenlosen Webspace.

    also canWrite und canRead geben true aus.
    Ich hab jetzt aber auch mal mit einem SecurtiyManager ausprobiert, der haut mir aber sowohl bei checkWrite oder auch checkDelete sowas um die ohren:

    Exception in thread "main" java.security.AccessControlException: access denied (java.io.FilePermission E:\ClipInc\Natascha Bedingfield - Unwritten.mp3 write)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkWrite(SecurityManager.java:962)
    at FehlerFenster.loesche(FehlerFenster.java:168)
    at FehlerFenster.widgetSelected(FehlerFenster.java:110)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
    at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
    at Hauptfenster.<init>(Hauptfenster.java:85)
    at Hauptfenster.main(Hauptfenster.java:20)

    Das sieht für mich nicht so aus als wär da noch ein anderer zugriff, sondern als hätte ich einfach nicht die rechte um die datei zu löschen.
  8. Hi,

    also mit dem Security Manager habe ich mich noch gar nicht beschäftigt.
    Dazu kann ich nichts sagen und auch nicht ausschließen, dass pawnee mit
    seiner Vermutung recht hat die Datei wäre noch geöffnet.

    Ich würde nun so vorgehen, dass ich mal versuche die Datei zu einem
    früheren Zeitpunkt im Programmablauf zu löschen. Da ich aber nicht wirklich
    weiss, wie das Programm insgesamt funktioniert kann ich auch hier nur raten.
    Alternativ kannst du auch versuchen eine Datei zu löschen, die von deinem
    Programm gar nicht verwendet wird. So kannst du zumindest ausschließen,
    dass die Datei geöffnet ist.

    Vielleicht liegt es auch am Laufwerk E:. Falls nicht der Fall, kannst du ja mal
    versuchen eine Datei zu löschen, die auf dem gleichen Laufwerk liegt wie das
    Programm selbst.

    Gruß
    Manni
  9. Autor dieses Themas

    tueddel

    tueddel hat kostenlosen Webspace.

    ich hab das jetzt mal mit dem früher löschen versucht und hab probier die gleiche Datei schon in der Klasse Hauptfenster zu löschen. Das hat wunderbar geklappt, von daher müsste sich das Problem auf die Klasse Fehlerfenster beschränken.

    Wie kann ich denn vernüftig herausfinden wo noch eine Referenz auf die Datei existiert?

    Beitrag zuletzt geändert: 9.2.2009 21:26:38 von tueddel
  10. k***o

    Hast du vllt in Lied einen Zugriff auf die Datei?
  11. Autor dieses Themas

    tueddel

    tueddel hat kostenlosen Webspace.

    also ich hab jetzt mal alles hochgeladen:

    http://download.lima-city.de/tueddel/MusikSWT.zip
  12. Hallo,

    so nun ist zwar schon einige Zeit vergangen, aber ich habe mir dein Problem mal angeschaut.
    Tatsächlich ist es so, dass du in der Klasse ID3 ein MP3File Objekt instanziierst. Sofern kein
    MP3 Tag ermittelt werden kann, wird ein Fehler geworfen. Diesen wertest du dann aus und erzeugst
    ein Fehlerfenster. In der Klasse MP3File wird das File zum lesen / schreiben geöffnet um nach dem
    MP3 Tag zu suchen. Wird nun die Suche mit einem Fehler abgebrochen, dann wird evtl. eine IOException
    geworfen und das File nicht mehr geschlossen.
    Du müsstest also die Klasse MP3File ändern, die Exception fangen und dann das File schließen,
    bevor du die Exception an deine Klassen weiterreichst. Ich habe das mal mit der IOException versucht.
    Dann läßt sich das File auch löschen.

    Leider etwas aufändig, da du die importierete Bibliothek anpassen mußt, aber die Quellen sind
    ja vorhanden.
    Ich hoffe du kannst mit meiner Beschreibung etwas anfangen.

    Gruß
    Manni
  13. Autor dieses Themas

    tueddel

    tueddel hat kostenlosen Webspace.

    joo vielen dank, werds mal probieren. Danke für die Hilfe
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!