2012-11-06 4 views
6

में एक अस्थायी फ़ाइल को लिखना मैं एक एपेंड मोड में एक अस्थायी फ़ाइल को लिखना चाहता हूं। मैं देखता हूं कि फ़ाइल बनाई गई है लेकिन स्ट्रिंगबफर का डेटा इसे लिखे नहीं जा रहा है। क्या कोई मुझे बता सकता है क्यों? कोड मैं लिखा है कृपया नीचे, लेखक बंद करने से पहले bw.flush() कॉल करने के लिएजावा

public static void writeToFile(String pFilename, StringBuffer sb) 
     throws IOException { 

    String property = "java.io.tmpdir"; 


    String tempDir = System.getProperty(property); 

    File dir = new File(tempDir); 
    File filename = File.createTempFile(pFilename, ".tmp", dir); 
    FileWriter fileWriter = new FileWriter(filename.getName(), true); 
    System.out.println(filename.getName()); 
    BufferedWriter bw = new BufferedWriter(fileWriter); 
    bw.write(sb.toString()); 
    bw.close(); 
} 
+0

आप कैसे जानते हैं कि डेटा इसे लिखे नहीं जा रहा है? [2-तर्क 'फ़ाइल # createTempFile() '] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#createTempFile%28java.lang.String,%20java .lang.String% 2 9) विधि, निर्देशिका को निर्दिष्ट करने के लिए कुछ भी नहीं करता है। –

+0

@ मैट: फ़ाइल बनाई गई है लेकिन मुझे फ़ाइल में कोई डेटा नहीं दिख रहा है और यह यादृच्छिक संख्या उत्पन्न किए बिना बनाई गई फ़ाइलों के लिए भी संभव है। – user1688404

+0

क्या आप वाकई अपनी स्ट्रिंगबफर सामग्री के साथ कोई त्रुटि नहीं हैं? कोशिश करें और लिखें "हैलो, वर्ल्ड!" फ़ाइल के लिए स्ट्रिंग। –

उत्तर

5
FileWriter fileWriter = new FileWriter(filename.getName(), true); 

,

FileWriter fileWriter = new FileWriter(filename, true); 
+0

['फ़ाइलवाइटर (स्ट्रिंग)'] (http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter (java.lang.String)) मौजूद है। चूंकि प्रश्न में 'फ़ाइल नाम' वास्तव में एक 'फ़ाइल' है, इसलिए इस कन्स्ट्रक्टर को ['File.getAbsolutePath()'] (http://docs.oracle.com/javase/7/docs/api/java/io] के साथ काम करना चाहिए /File.html#getAbsolutePath())। –

+0

इसके अलावा फ़ाइलवाइटर (स्ट्रिंग, बूलियन एपेंड) मौजूद है, इसलिए जो भी टिचोड्रोमा कहा गया है वह सही है –

+0

@ जूप: धन्यवाद यह काम करता है .. लेकिन उत्पन्न होने वाले यादृच्छिक संख्याओं के बिना उत्पन्न होने वाले फ़ाइल नामों के लिए संभव है – user1688404

0

प्रयास करें। हालांकि मुझे लगता है कि लेखक बंद किया जा रहा से पहले स्वचालित रूप से फ्लश बुलाना चाहिए ...

0
FileWriter fileWriter = new FileWriter(filename.getName(), true); 

होना चाहिए

FileWriter fileWriter = new FileWriter(filename, true); 

आप भी इस

FileWriter fileWriter = new FileWriter(filename.getAbsolutePath+filename.getName(), true); 

टिप्पणी का उपयोग कर सकते

`filename.getName();` 

फाइल लौटाता है पूर्ण पथ के बिना ename। तो ऐसा मामला हो सकता है कि यह वर्तमान कार्य निर्देशिका में एक फाइल बना रहा है और इसमें लिख रहा है।

+0

में बदलने के लिए कोड की रेखा इस समस्या को कैसे हल करती है? –

1
इसके बजाय अस्थायी निर्देशिका में फ़ाइल बनाने के

हो अपने काम निर्देशिका में फाइल बनाने और प्रयोग objFile.deleteOnExit() यह भी अस्थायी निर्देशिका में फाइल बनाने के समान ही काम करेंगे चाहिए।

+1

आपको क्यों लगता है कि यह एक बेहतर विचार है कि एक अस्थायी फ़ाइल प्राप्त करना? –

+0

यह बेहतर विचार नहीं है, लेकिन यह एक विकल्प है, यह काम करेगा। – Vijay

+1

एक अस्थायी फ़ाइल "भी" काम करना चाहिए। –

4

यह काम करता है:

public static void writeToFile(String pFilename, StringBuffer sb) throws IOException { 
    File tempDir = new File(System.getProperty("java.io.tmpdir")); 
    File tempFile = File.createTempFile(pFilename, ".tmp", tempDir); 
    FileWriter fileWriter = new FileWriter(tempFile, true); 
    System.out.println(tempFile.getAbsolutePath()); 
    BufferedWriter bw = new BufferedWriter(fileWriter); 
    bw.write(sb.toString()); 
    bw.close(); 
} 

नोट FileWriter(File, boolean) के उपयोग और System.out.println(tempFile.getAbsolutePath()) की।