2012-04-01 12 views
5

निम्न कोड हमेशा फ़ाइल नहीं बनाता है। जहां तक ​​मैंने देखा, पहली बार इस कोड को चलाया गया है, हालांकि कोई अपवाद नहीं फेंक दिया गया है और बनाया गया है FileSucceeded == सत्य, फ़ाइल नहीं बनाई गई है।जावा file.createNewFile फ़ाइल नहीं बनाई गई और कोई अपवाद फेंक दिया गया

मैं विंडोज पर कोड, जावा 6.

चलाने किसी भी इनपुट मददगार हो सकता है

File file = new File(tmpDir, fileName); 

try { 
if (tmpDir == null) { 
    String environmentHomePath // = somePath; 
    tmpDir = new File(environmentHomePath, "SampleDumps"); 

    if (! tmpDir.exists() || ! tmpDir.isDirectory()) { 
    boolean mkdirSucceeded = tmpDir.mkdir(); 
    if (! mkdirSucceeded) { 
     throw new IOException("Failed creating directory: '" + tmpDir.getAbsolutePath() + "'"); 
    } 
    } 
} 

if (file.exists()) { 
    boolean deleteFileSucceeded = file.delete(); 
    if (! deleteFileSucceeded) { 
    throw new IOException("Unable to delete pre existing sample file: '" + fileName + "'"); 
    } 
} 

boolean createFileSucceeded = file.createNewFile(); 
if (! createFileSucceeded) { 
    throw new IOException("Unable to create sample file: '" + fileName + "'"); 
} 

fw = new FileWriter(file); 
bw = new BufferedWriter(fw); 

StringBuilder sb = new StringBuilder("something..."); 

bw.write(sb.toString()); 
bw.flush(); 
} 
catch (IOException ioe) { 
log.warn("Unable to file invalid sample to file: '" + fileName + "'", ioe); 
} 
finally { 
if (bw != null) { 
    try { 
    bw.close(); 
    } catch (IOException e) { 
    log.warn("Unable to close Writer to file: '" + fileName + "'", e); 
    } 
} 
else if (fw != null) { 
    try { 
    fw.close(); 
    } catch (IOException e) { 
    log.warn("Unable to close Writer to file: '" + fileName + "'", e); 
    } 
} 
} 
+0

हो सकता है कि उपयोगकर्ता को एप्लिकेशन को निष्पादित करने वाले उपयोगकर्ता के पास उस निर्देशिका में फ़ाइल बनाने के लिए पर्याप्त विशेषाधिकार नहीं हैं –

+0

@LuiggiMendoza लेकिन दूसरी प्रक्रिया के लिए लगातार उसी प्रक्रिया में कोड चलाते हुए, फ़ाइल बनाते हैं। –

+1

मैंने आपका कोड चलाने की कोशिश नहीं की है, लेकिन मुझे संदेह होगा कि उस निर्देशिका में मौजूद फ़ाइल बनाने के बाद tmpDir बनाने से फ़ाइल विधियों जैसे अप्रत्याशित व्यवहार हो सकता है()। – GreyBeardedGeek

उत्तर

6

तो file.createNewFile() रिटर्न true फिर एक फ़ाइल बनाया गया था।

फ़ाइल की बनाई जा रही सबसे अधिक संभावना स्पष्टीकरण, लेकिन उस स्थान पर जहां आप उम्मीद कर रहे हैं। मैं उम्मीद करते हैं कि आप फ़ाइल के लिए एक रिश्तेदार पथ नाम का उपयोग कर रहे हैं ...


अपने कोड और अपनी टिप्पणी पर अधिक ध्यान से देख रहे हैं, मुझे लगता है कि वास्तव में क्या हो रहा है। इस तरह से एक नज़र डालें कि आप अस्थायी निर्देशिका बनाते हैं। आप पहले मूल निर्देशिका के रूप में tmpdir का उपयोग कर फ़ाइल का निर्माण करते हैं। फिर आप देख सकते हैं कि tmpdirnull है और एक निर्देशिका बनाएं। लेकिन फिर आप File ऑब्जेक्ट का उपयोग करने के लिए आगे बढ़ते हैं जो अभी भी null मूल निर्देशिका है !!

tmpdir की जांच करने के बाद आपको File ऑब्जेक्ट बनाने की आवश्यकता है और यदि आवश्यक हो तो इसे बनाना।

2

tmpDir से निपटने वाला आपका दृष्टिकोण त्रुटिपूर्ण है। फ़ाइल कहीं बनाई जा रही है।

File(String, String) के लिए Javadocs से

:

तो माता-पिता रिक्त है तो नए फ़ाइल उदाहरण के रूप में अगर यह देखते हुए बच्चे पथ स्ट्रिंग पर एकल तर्क फ़ाइल निर्माता लागू द्वारा बनाई गई है।

2

कुछ परीक्षण के बाद, मैं गलती मिल गया है और यह सही है:

try { 
    //create tmpDir if its null 
    if (tmpDir == null) { 
     String environmentHomePath = "D:/"; //change to somepath 
     //tmpDir must be a directory path 
     tmpDir = new File(environmentHomePath); 

     if (!tmpDir.exists() || !tmpDir.isDirectory()) { 
      boolean mkdirSucceeded = tmpDir.mkdir(); 
      if (!mkdirSucceeded) { 
       throw new IOException("Failed creating directory: '" + tmpDir.getAbsolutePath() + "'"); 
      } 
     } 
    } 
    //create the path 
    File file = new File(tmpDir, fileName); 
    if (file.exists()) { 
     boolean deleteFileSucceeded = file.delete(); 
     if (!deleteFileSucceeded) { 
      throw new IOException("Unable to delete pre existing sample file: '" + fileName + "'"); 
     } 
    } 
    boolean createFileSucceeded = file.createNewFile(); 
    if (!createFileSucceeded) { 
     throw new IOException("Unable to create sample file: '" + fileName + "'"); 
    } 

    fw = new FileWriter(file); 
    bw = new BufferedWriter(fw); 

    StringBuilder sb = new StringBuilder("something..."); 
    bw.write(sb.toString()); 
    bw.flush(); 
} catch (IOException ioe) { 
    log.warn("Unable to file invalid sample to file: '" + fileName + "'", ioe); 
} finally { 
    try { 
    if (bw != null) { 
     try { 
      bw.close(); 
     } catch (IOException e) { 
      log.warn("Unable to close Writer to file: '" + fileName + "'", e); 
     } 
    } 
    else if (fw != null) { 
     try { 
      fw.close(); 
     } catch (IOException e) { 
      log.warn("Unable to close Writer to file: '" + fileName + "'", e); 
    } 
} 
+0

@BrianRoach मैंने कोई जवाब नहीं दिया है जब मैंने कोई जवाब नहीं दिया है, और मैंने स्टीफनसी को ऊपर उठाया है क्योंकि वह समस्या को ढूंढने वाला पहला व्यक्ति था –

0

अपने फ़ाइल नाम की जाँच करें। इसमें कोई भी कॉलन : या कोई अन्य समान चरित्र नहीं होना चाहिए, जो अपवाद फेंकता है।

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