FileNotFound (Zugriff verweigert) Ausnahme auf java.io

Warum bekomme ich diese Fehlermeldung, wenn ich dieses Programm ausführen? Dies erfolgt nach dem Zufallsprinzip Iterationen. In der Regel nach der 8000er iteration.

public static void main(String[] args)
{
    FileWriter writer = null;
    try
    {
        for(int i = 0; i < 10000; i++)
        {
            File file = new File("C:\\Users\\varun.achar\\Desktop\\TODO.txt");

            if(file.exists())
            {
                System.out.println("File exists");
            }
            writer = new FileWriter(file, true);
            writer.write(i);
            System.out.println(i);
            writer.close();
            if(!file.delete())
            {
                System.out.println("unable to delete");
            }

            //Thread.sleep(10);
            //writer = null;
            //System.gc();
        }
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
    finally
    {
        if(writer != null)
        {
            try
            {
                writer.close();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
    }
}

Nachdem die Ausnahme Auftritt, wird die Datei nicht vorhanden ist. Das bedeutet, dass die es löschen, aber FIleWriter versucht, die Sperre vor, dass, obwohl es ist nicht ein multi-threaded Programm. Ist es, weil der Windows nicht löschen Sie die Datei schnell genug, und daher der FileWriter nicht eine Sperre? Wenn ja, dann die Datei.delete () - Methode gibt, bevor windows tatsächlich löscht es?

Wie kann ich es lösen, da bin ich immer ein ähnliches Problem beim laden testen meiner Anwendung.

EDIT 1: Stacktrace:

java.io.FileNotFoundException: C:\Users\varun.achar\Desktop\TODO.txt (Access is denied)     
at java.io.FileOutputStream.openAppend(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:192)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
    at java.io.FileWriter.<init>(FileWriter.java:61)

EDIT 2 : Datei Hinzugefügt.exists() und file.löschen von Bedingungen im Programm. und die neue stacktrace:

7452
java.io.FileNotFoundException: C:\Users\varun.achar\Desktop\TODO.txt (Access is denied)
    at java.io.FileOutputStream.openAppend(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:192)
    at java.io.FileWriter.<init>(FileWriter.java:90)
    at com.TestClass.main(TestClass.java:25)

EDIT 3 Thread dump

TestClass [Java Application]    
    com.TestClass at localhost:57843    
        Thread [main] (Suspended (exception FileNotFoundException)) 
            FileOutputStream.<init>(File, boolean) line: 192    
            FileWriter.<init>(File, boolean) line: 90   
            TestClass.main(String[]) line: 24   
    C:\Users\varun.achar\Documents\Softwares\Java JDK\JDK 6.26\jdk\jre\bin\javaw.exe (09-Nov-2011 11:57:34 PM)  

BEARBEITEN 4 : Programm läuft erfolgreich auf anderen Rechner mit dem gleichen OS. Nun, wie Stelle ich sicher, dass die app mit laufen erfolgreich in der Maschine bereitgestellt wird, in?

  • Pls. post Stacktrace auch.
  • was ist die Ausnahme, auch das, was sind Sie versuchen zu testen?
  • Die Thread.sleep() scheint zu helfen, aber ich kann nicht, dass in dem Programm, sonst ist es ein Jahrhundert und eine Hälfte, um die vollständige Ausführung. Ich könnte versuchen ein Erwerb Sperre, bis es gelingt, aber gibt es eine bessere Möglichkeit?
  • Ich würde zuerst versuchen, um zu überprüfen delete()'s Rückgabewert - ist es immer true? Gilt die Ausnahme, kommen aus writer.close() oder aus writer.write() oder beim erstellen der writer? Auch, was meinst du mit "sperren"? Ich sehe keine Schlösser im Programm.
  • Was ist die Ausnahme? Und auch nach dem stack-trace.
  • Sperre für den FileWriter zum schreiben in die Datei.
  • Ich bin laden testen meiner app und ich bin immer diese Fehlermeldung. Ich habe gerade neu in diesem Programm.
  • Sie testen es auf die Plattform und-version??
  • java 6.26 + windows 7
  • Pls. überprüfen Sie für file.delete() Wert und lassen Sie uns wissen, das Ergebnis kurz vor die Ausnahme.
  • Helfen tut es nicht. Die Linie nach if(!file.delete()) wird nicht ausgeführt. Weder if(file.exists()) die derzeit vor der Erstellung der FileWriter
  • Versuchen Sie, etwas weired. Versuchen Sie dasselbe Programm nach chagning Speicherort der Datei, und ändern Sie den Namen der Datei zu.
  • scheint das Problem mit dem window7 permission manager
  • Ich bekomme das gleiche Problem auf xp 32 bit. Nicht sicher, warum? Andere haben erlebt, wie gut. Ich glaube, dass wenn ich versuche mit nicht-Anhängen, die wird funktionieren.
  • Verwenden Sie die Technik, die ich erklärt habe, in meiner eigenen Antwort. Ist fail safe.

InformationsquelleAutor Varun Achar | 2011-11-10
Schreibe einen Kommentar