2015-05-06 6 views
16

मैं जावा के साथ एक सीएसवी फ़ाइल में डेटा लिखने की कोशिश कर रहा हूं, हालांकि जब मैं एक्सेल के साथ उत्पादित फ़ाइल खोलने का प्रयास करता हूं तो मुझे यह कहते हुए एक त्रुटि मिल रही है कि फ़ाइल दूषित है। नोटपैड में फ़ाइल खोलने पर इसे सही रूप से स्वरूपित किया जा रहा है, इसलिए मुझे यकीन नहीं है कि समस्या क्या है। मैं फाइल को डेटा आउटपुट करने के लिए FileWriter क्लास का उपयोग कर रहा हूं।जावा - एक CSV फ़ाइल को स्ट्रिंग्स लिखना

FileWriter writer = new FileWriter("test.csv"); 

writer.append("ID"); 
writer.append(','); 
writer.append("name"); 
writer.append(','); 
... 
writer.append('\n'); 

writer.flush(); 
writer.close(); 

क्या मुझे एक सीएसवी फ़ाइल को मुद्रित करने के लिए जावा में कुछ लाइब्रेरी का उपयोग करने की आवश्यकता है? मैंने माना कि जब तक आप सही स्वरूपण का उपयोग नहीं करते हैं तब तक आप इसे जावा में मूल रूप से कर सकते हैं।

मदद की सराहना,

शॉ

+2

शुरुआत के लिए एक लाइन लिखने के लिए एक विधि को निकालने, और writer.newLine साथ writer.append ('\ n') की जगह()। क्योंकि न्यूलाइन ऑपरेटिंग सिस्टम पर भरोसेमंद है। – Beri

+0

क्या आपने डेटा टैब से टेक्स्ट या डेटा आयात विज़ार्ड के साथ एक्सेल के साथ सीएसवी फ़ाइल खोलने का प्रयास किया है? वही corrput फ़ाइल? – exoddus

+0

@ शॉ, मेरा समाधान जांचें और मुझे बताएं कि आपके लिए काम करता है या नहीं। –

उत्तर

46

मूल रूप से यह क्योंकि एमएस एक्सेल कैसे इस तरह की सामग्री के साथ फ़ाइल खोलने के लिए तय नहीं कर सकता है।

जब आप एक स्प्रेडशीट प्रकार फ़ाइल में पहली चरित्र के रूप में ID शब्दों में कहें, यह एक SYLK फ़ाइल और एमएस एक्सेल (और संभवत: अन्य स्प्रेडशीट ऐप्स) एक SYLK फ़ाइल के रूप में इसे खोलने की कोशिश करता है के विनिर्देश से मेल खाता है। लेकिन साथ ही, यह SYLK फ़ाइल के पूर्ण विनिर्देश को पूरा नहीं करता है क्योंकि फ़ाइल में शेष मान अल्पविराम से अलग होते हैं। इसलिए, त्रुटि दिखायी गयी है।

समस्या को हल करने के लिए, "ID" से "id" बदलें और इसे अपेक्षा के अनुसार काम करना चाहिए।

enter image description here

यह अजीब है। लेकिन हाँ!

फ़ाइल ऑब्जेक्ट को कम करके फ़ाइल एक्सेस को कम करने की भी कोशिश कर रहा है।

मैंने परीक्षण किया और नीचे दिया गया कोड सही काम करता है।

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.PrintWriter; 


public class CSV { 
    public static void main(String[]args) throws FileNotFoundException{ 
     PrintWriter pw = new PrintWriter(new File("test.csv")); 
     StringBuilder sb = new StringBuilder(); 
     sb.append("id"); 
     sb.append(','); 
     sb.append("Name"); 
     sb.append('\n'); 

     sb.append("1"); 
     sb.append(','); 
     sb.append("Prashant Ghimire"); 
     sb.append('\n'); 

     pw.write(sb.toString()); 
     pw.close(); 
     System.out.println("done!"); 
    } 
} 
+0

"pw.write" के बजाय "pw.print" का उपयोग करना ठीक होगा? – Aqqqq

+0

हां। http://stackoverflow.com/questions/14067843/difference-between-printwriter-and-filewriter-class –

5
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.PrintWriter; 

public class CsvFile { 


public static void main(String[]args){ 
PrintWriter pw = null; 
try { 
    pw = new PrintWriter(new File("NewData.csv")); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 
StringBuilder builder = new StringBuilder(); 
String ColumnNamesList = "Id,Name"; 
// No need give the headers Like: id, Name on builder.append 
builder.append(ColumnNamesList +"\n"); 
builder.append("1"+","); 
builder.append("Chola"); 
builder.append('\n'); 
pw.write(builder.toString()); 
pw.close(); 
System.out.println("done!"); 
} 
} 
संबंधित मुद्दे