2012-03-07 14 views
24

मैं एक अस्थायी फ़ाइल बनाने की आवश्यकता है, इसलिए मैं इस कोशिश की:फ़ाइल नाम में यादृच्छिक संख्या के बिना जावा में एक temp फ़ाइल कैसे बनाएं?

String[] TempFiles = {"c1234c10","c1234c11","c1234c12","c1234c13"}; 
for (int i = 0; i <= 3; i++) { 
    try { 
     String tempFile = TempFiles[i]; 
     File temp = File.createTempFile(tempFile, ".xls"); 
     System.out.println("Temp file : " + temp.getAbsolutePath()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

उत्पादन कुछ इस तरह है:

Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c108415816200650069233.xls 
Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c113748833645638701089.xls 
Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c126104766829220422260.xls 
Temp file : C:\Users\MD1000\AppData\Local\Temp\c1234c137493179265536640669.xls 

अब, मैं अतिरिक्त संख्या नहीं करना चाहते (लंबी पूर्णांक) जो फ़ाइल नाम में जोड़ा जा रहा है। मैं उसे कैसे प्राप्त कर सकता हूं? धन्यवाद

उत्तर

28

सबसे पहले, सिस्टम के अस्थायी निर्देशिका प्राप्त करने निम्नलिखित स्निपेट का उपयोग करें:

String tDir = System.getProperty("java.io.tmpdir"); 

तो व्यक्तिगत रूप से प्रत्येक फ़ाइल बनाने के लिए अपने tempFiles[] सरणी के साथ संयोजन के रूप में tDir चर का उपयोग करें।

+0

धन्यवाद! इसने काम कर दिया। –

+2

क्या इन सभी मैन्युअल रूप से बनाई गई फ़ाइलों को बाहर निकलने पर स्वचालित रूप से हटा दिया जाएगा? (मुझे ऐसा लगता है, लेकिन बस यह सुनिश्चित करने के लिए, अगर कोई पुष्टि कर सकता है)। – Larry

+4

बस ध्यान दें कि यदि आप ऐसा करते हैं, तो आप File.createTempFile का उपयोग नहीं कर रहे हैं, लेकिन फ़ाइल बनाने का कोई अन्य तरीका है। – JohnK

4

यदि आप सिस्टम-व्यापी अस्थायी निर्देशिका में बनाए गए विशिष्ट नामों वाली फ़ाइलों को चाहते हैं, तो %temp% पर्यावरण चर का विस्तार करें और फ़ाइल को मैन्युअल रूप से बनाएं, इसके साथ कुछ भी गलत नहीं है।

संपादित करें: वास्तव में, इसके लिए System.getProperty("java.io.tmpdir")); का उपयोग करें।

+1

कि अस्थायी फ़ाइल का स्थान सेट हो जाएगा, लेकिन यह फ़ाइल नाम में डाला अतिरिक्त संख्या के लिए खाते में नहीं होंगे। – jmq

+1

मेरा मानना ​​है कि आपने कभी मेरा जवाब पूरी तरह पढ़ा नहीं है। – Irfy

+1

मैंने इसे पढ़ा। मैंने आपके जवाब को गलत समझा। – jmq

15

यदि आप अस्थायी फ़ाइल नाम उत्पन्न करने के लिए File.createTempFile का उपयोग नहीं करते हैं तो आप नहीं कर सकते हैं। मैं एक अस्थायी फ़ाइल पैदा करने के लिए जावा स्रोत को देखा (जावा 1.7 के लिए, आप अपने संस्करण तो मैं बस मेरा इस्तेमाल किया राज्य नहीं था):

private static class TempDirectory { 
    private TempDirectory() { } 

    // temporary directory location 
    private static final File tmpdir = new File(fs.normalize(AccessController 
     .doPrivileged(new GetPropertyAction("java.io.tmpdir")))); 
    static File location() { 
     return tmpdir; 
    } 

    // file name generation 
    private static final SecureRandom random = new SecureRandom(); 
    static File generateFile(String prefix, String suffix, File dir) { 
     long n = random.nextLong(); 
     if (n == Long.MIN_VALUE) { 
      n = 0;  // corner case 
     } else { 
      n = Math.abs(n); 
     } 
     return new File(dir, prefix + Long.toString(n) + suffix); 
    } 
} 

यह जावा JDK में कोड है कि अस्थायी फ़ाइल उत्पन्न है नाम। आप देख सकते हैं कि यह एक यादृच्छिक संख्या उत्पन्न करता है और इसे आपके उपसर्ग और प्रत्यय के बीच आपके फ़ाइल नाम में सम्मिलित करता है। यह "File.java" (java.io में) में है। मुझे इसे बदलने का कोई तरीका नहीं दिख रहा था।

0

कस्टम नाम के रूप में उपयोग करते हुए Guava

File temp=new File(tempFile, ".xls"); 
if (!temp.exists()) { 
    temp.createNewFile(); 
} 
+0

अच्छा और सरल। – huahsin68

+0

डाउनवोट। 'Temp.exists()' पर कॉल एक रेस शर्त प्रस्तुत करता है कि 'temp.createNewFile()' को विशेष रूप से टालने के लिए डिज़ाइन किया गया था। बस 'temp.createNewFile()' के वापसी मूल्य की जांच करें। 'CreateNewFile()' के विनिर्देश पढ़ें। महत्वपूर्ण शब्द * परमाणु * है। https://docs.oracle.com/javase/7/docs/api/java/io/File.html#createNewFile%28%29 –

3

इस प्रकार बचाया जा सकता है:

import com.google.common.io.Files; 

... 

File myTempFile = new File(Files.createTempDir(), "MySpecificName.png"); 
+0

मेरा दिन बचाने के लिए धन्यवाद! – realPK

0

फिर आप एक अस्थायी निर्देशिका बना सकते हैं उस में नई फ़ाइलों को स्टोर। इस प्रकार आपके द्वारा जोड़े गए सभी नई फाइलों में इसका कोई यादृच्छिक विस्तार नहीं होगा। जब आप पूरा कर लेंगे तो आपको जो अस्थायी निर्देशिका जोड़नी है उसे हटा दें।

public static File createTempFile(String prefix, String suffix) {  
    File parent = new File(System.getProperty("java.io.tmpdir")); 

    File temp = new File(parent, prefix + suffix); 

    if (temp.exists()) { 
     temp.delete(); 
    } 

    try { 
     temp.createNewFile(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 

    return temp; 
} 


public static File createTempDirectory(String fileName) {  
    File parent = new File(System.getProperty("java.io.tmpdir")); 

    File temp = new File(parent, fileName); 

    if (temp.exists()) { 
     temp.delete(); 
    } 

    temp.mkdir(); 

    return temp; 
} 
0
public static File createTempDirectory(String dirName) { 
     File baseDir = new File(System.getProperty("java.io.tmpdir")); 
     File tempDir = new File(baseDir, dirName); 
     if (tempDir.mkdir()) { 
      return tempDir; 
     } 
     return null; 
} 
+1

कोड के लिए कुछ स्पष्टीकरण जोड़ना ओपी के लिए सहायक होगा। – SANM2009

+0

इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित अल्पकालिक सहायता प्रदान कर सकता है। एक उचित स्पष्टीकरण [बहुत सुधार होगा] (// meta.stackexchange.com/q/114762) यह दिखाकर इसका दीर्घकालिक मूल्य * क्यों * यह समस्या का एक अच्छा समाधान है, और भविष्य के पाठकों के साथ इसे और अधिक उपयोगी बना देगा अन्य, समान प्रश्न। आपके द्वारा किए गए अनुमानों सहित कुछ स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें। –

संबंधित मुद्दे