2013-02-20 13 views
5

मेरे पास जावा में एक एप्लिकेशन है कि मैं एक फ़ाइल (बहुत बड़ा) पढ़ने के लिए openCSV का उपयोग कर रहा हूं। मैं फिर चौथा डाल रहा हूं (आखिरकार इसमें एक और कॉलम होगा या दो जोड़ा जाएगा यदि इससे कोई फर्क पड़ता है) कॉलम हैशसेट में और उसे एक नई फाइल में आउटपुट करना। यह सब ठीक काम करने लगता है लेकिन मुझे पता चला कि यह केवल फाइल का हिस्सा पढ़ रहा है (272, 9 48 की 131,544 लाइनें)। क्या यह सामान्य रूप से ओपनसीएसवी या जावा का एक सीमा है या इसके आसपास जाने का कोई तरीका है?openCSV मेरी पूरी फ़ाइल नहीं पढ़ रहा है

संदर्भ के लिए मेरे कोड:

public static void main(String[] args) throws IOException { 
    String itemsFile = new String();   
    String outFile = new String(); 
    itemsFile = "items.txt";   
    outFile = "so.txt"; 
    CSVReader reader = null; 
    try { 
     reader = new CSVReader(new FileReader(itemsFile), '\t'); 
    } catch (FileNotFoundException e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
    } 

    String[] nextLine; 
    HashSet<String> brands = new HashSet<>();    
    while ((nextLine = reader.readNext()) != null) { 
     brands.add(nextLine[4]);    
    }    

    String[] brandArray = new String[brands.size()]; 
    Iterator<String> it = ((HashSet<String>) brands).iterator(); 
    int listNum = 0; 
    while (it.hasNext()) { 
     Object brand = (Object) it.next(); 
     brandArray[listNum] = (String) brand; 
     listNum++; 
    } 

    CSVWriter writer = new CSVWriter(new FileWriter(outFile), '\n'); 
    writer.writeNext(brandArray);   
    writer.close(); 
} 

मैं माफी माँगता हूँ अगर मेरे कोड गन्दा है यह मेरी पहली असली "पूर्ण" जावा अनुप्रयोग है। किसी भी सहायता की बहुत सराहना की है।

मैं भी यकीन है कि यह कुछ चरित्र या कुछ और पर फांसी नहीं कर रहा है बनाने के लिए पाठ फ़ाइल से उन पंक्तियों को हटाने की कोशिश की है, लेकिन यह है कि लाइन पर बंद करने के लिए वैसे भी

+0

क्या आपने यह समझने के लिए संग्रहों का आकार मुद्रित किया है कि क्या होता है? क्या आपने अपने प्रोग्राम में ब्रेकपॉइंट डालने की कोशिश की है जब यह अंतिम पठन रेखा तक पहुंचने के लिए पहुंचता है कि क्या wring जाता है? – assylias

+1

इसके अलावा आप एक हैशसेट में आइटम जोड़ते हैं, जिसमें डुप्लिकेट नहीं हो सकते हैं। इसलिए यदि एक बार स्ट्रिंग को एक बार जोड़ा जाएगा तो इसे केवल एक बार जोड़ा जाएगा। यह हो रहा है कि क्या हो रहा है। ArrayList द्वारा हैशसेट को बदलें और देखें कि यह बेहतर काम करता है या नहीं। – assylias

+0

@assylias मैंने एक Arraylist में बदलने की कोशिश की है, लेकिन मुझे एक ही परिणाम मिलता है। मैं हैशसेट का उपयोग कर रहा हूं क्योंकि मैं डुप्लीकेट नहीं चाहता हूं। मैंने यह पता लगाया कि लूप को काउंटर जोड़कर यह किस लाइन पर रुक गया है जो हैशसेट में मान जोड़ता है। मैं हालांकि ब्रेक प्वाइंट जोड़ने की कोशिश करूंगा और देखें कि क्या होता है। – Hirthas

उत्तर

8

ठीक मैं इस पता लगा उपयोगकर्ता के लिए धन्यवाद लगता है @ चैट में माइकल। स्पष्ट रूप से openCSV ऐसी बड़ी फ़ाइल को संभाल नहीं सकता क्योंकि यह स्ट्रीमिंग नहीं कर रहा है। इसलिए मैंने इस फाइल को स्ट्रीम करने में देखा और यह बहुत अच्छा काम करता है।

public static void main(String[] args) throws IOException { 

    String fileName = new String(); 
    fileName = "items.txt"; 
    String outputFile = new String(); 
    outputFile = "so.txt";  
    String thisLine; 
    HashSet<String> brand = new HashSet<>(); 
    FileInputStream fis = new FileInputStream(fileName); 
    @SuppressWarnings("resource") 
    BufferedReader myInput = new BufferedReader(new InputStreamReader(fis)); 
    while ((thisLine = myInput.readLine()) != null) { 
     String[] line = thisLine.split("\t"); 
     if (line[20].equals("1")) { 
      if (!line[2].equals("") && !line[2].equals(" ") 
        && !line[2].equals(null)) {     
       if(line[2].indexOf("'") > -1){ 
        System.out.println(line[2]); 
        line[2] = line[2].replace("'", "\'"); 
        System.out.println(line[2]); 
       } 

       brand.add(line[2]); 
      } 
     } 
     if (!line[3].equals("") && !line[3].equals(" ") 
       && !line[3].equals(null)) {    
       line[3] = line[3].replace("'", "\'");    
      brand.add(line[3]); 
     } 
     if (!line[4].equals("") && !line[4].equals(" ") 
       && !line[4].equals(null)) { 
      if(line[4].indexOf("'") > -1){ 
       System.out.println(line[4]); 
       line[4] = line[4].replace("'", "\'"); 
       System.out.println(line[4]); 
      } 


      brand.add(line[4]); 
     } 
    } 

    String[] brands = brand.toArray(new String[brand.size()]); 

    try { 
     FileWriter fstream = new FileWriter(outputFile); 
     BufferedWriter bw = new BufferedWriter(fstream); 
     for (int i = 0; i < brands.length; i++) { 

      if (i == 0) { 
       bw.write("'" + brands[i] + "'"); 
      } else { 
       bw.write(",'" + brands[i] + "'"); 
      } 
     }   

     bw.close(); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
    } 
} 

इस पर हर किसी की मदद के लिए धन्यवाद:

यहाँ अंत कोड है।

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