2014-07-15 18 views
10

मैंने अस्थायी उपयोग के लिए कुछ फाइलें बनाई हैं और उन्हें कुछ तरीकों के लिए इनपुट के रूप में उपयोग किया है। और मैंनेहटाएं फ़ाइल को हटा नहीं रहा

deleteOnExit() 

मैंने बनाई गई सभी फ़ाइलों पर कॉल किया। लेकिन एक फाइल अभी भी बनी हुई है।

मुझे लगता है ऐसा इसलिए है क्योंकि फ़ाइल भी उपयोग में है, लेकिन संकलक अगली पंक्ति के बाद ही चालू लाइन से किया जाता है करने के लिए जाना नहीं है? (एकल धागा)

जबकि इसकी नहीं एक समस्या व्यावहारिक रूप से की वजह से जावा ओवरराइट, हमेशा एक फ़ाइल है। मैं समझता हूँ कि क्यों ऐसा होता है और यह भी चाहते हैं कि अगर मैं

Thread.sleep(sometime); 

संपादन का उपयोग कर सकते हैं: -

File x = new file("x.txt"); 
new class1().method1(); 

सभी फाइलें (5) बनाने के बाद, मैं तो बस इस लाइन

x.deleteOnExit(); y.deletOnExit() and so on... 
जोड़ा

अंतिम फाइल को छोड़कर सभी फाइलें हटा दी गई हैं।

+2

आप अपना कोड जोड़ना चाहते हैं। समस्या इसमें हो सकती है। –

+0

क्या आपने वास्तव में अपनी जावा प्रक्रिया से बाहर निकला है? –

+0

इसे संभालने का एक संभावित बेहतर तरीका अंतिमकर्ताओं का उपयोग कर रहा है ... –

उत्तर

14

सुनिश्चित करें कि जो कुछ धाराओं फाइल करने के लिए लिख रहे हैं बंद हो जाती हैं बनाओ। अगर स्ट्रीम बंद नहीं है, तो फाइल लॉक हो जाएगी और हटाएं झूठी वापसी होगी। यह एक मुद्दा था जो मेरे पास था। उम्मीद है कि मदद करता है।

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.StringWriter; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 


public class Test { 

    public static void main(String[] args) { 

     File reportNew = null; 
     File writeToDir = null; 

     BufferedReader br = null; 
     BufferedWriter bw = null; 
     StringWriter sw = null; 

     List<File> fileList = new ArrayList<File>(); 

     SimpleDateFormat ft = new SimpleDateFormat("yyyymmdd_hh_mm_ss_ms"); 


     try { 

      //Read report.new file 
      reportNew = new File("c:\\temp\\report.new"); 

      //Create temp directory for newly created files   
      writeToDir = new File("c:\\temp"); 
      //tempDir.mkdir(); 

      //Separate report.new into many files separated by a token 
      br = new BufferedReader(new FileReader(reportNew)); 
      sw = new StringWriter(); 
      new StringBuilder(); 



      String line; 
      int fileCount = 0; 

      while (true) { 

       line=br.readLine(); 

       if (line == null || line.contains("%PDF")) { 

        if (!sw.toString().isEmpty()) { 

         fileCount++; 

         File _file = new File(writeToDir.getPath() 
              + File.separator 
              + fileCount 
              + "_" 
              + ft.format(new Date()) 
              + ".htm"); 

         _file.deleteOnExit(); 
         fileList.add(_file); 


         bw = new BufferedWriter(new FileWriter(_file)); 
         bw.write(sw.toString()); 

         bw.flush(); 
         bw.close(); 
         sw.getBuffer().setLength(0); 

         System.out.println("File " 
              + _file.getPath() 
              + " exists " 
              + _file.exists()); 
        } 

        if (line == null) 
         break; 
        else 
         continue; 
       } 

       sw.write(line); 
       sw.write(System.getProperty("line.separator")); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (bw != null) { 
       try { 
        bw.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
+1

शायद कोड के साथ अपने बिंदु को चित्रित करने के लिए यह उपयोगी होगा – beresfordt

2

आपके प्रोग्राम में खोले गए फ़ाइल को बंद करने के लिए, एक स्पष्ट समाप्ति विधि बनाने का प्रयास करें।

इसलिए, लेखन निम्न प्रयास करें:

public class ClassThatUsesFile { 

    private String filename; 
    private BufferReader reader; 

    public ClassThatUsesFile (String afile) { 
     this.filename = afile; 
     this.reader = new BufferReader(new FileReader(afile)); 
    } 

    // try-finally block guarantees execution of termination method 

    protected void terminate() { 
     try { 
      // Do what must be done with your file before it needs to be closed. 
     } finally { 
      // Here is where your explicit termination method should be located. 
      // Close or delete your file and close or delete your buffer reader. 
     } 
    } 

} 
-7

कोई समस्या नहीं है। deleteOnExit() मेरे लिए एक आकर्षण की तरह काम करता है।

File file = new File(UUID.randomUUID().toString() + ".html"); 
file.deleteOnExit(); 

// open file here 

// process file here 

// flush/close file here 
संबंधित मुद्दे