2012-10-05 4 views
11

मेरे पास 0 स्ट्रिंग Map<String, String> ldapContent = new HashMap<String, String> के साथ HashMap है।हैश मैप के साथ फ़ाइल को कैसे लिखना और पढ़ना है?

अब मैं एक बाहरी फ़ाइल में Map को बचाने के लिए इसे फिर से आरंभ करने के बिना बाद में Map उपयोग करना चाहते हैं ...

तो मैं कैसे सहेजना चाहिए Map बाद में फिर से इसका इस्तेमाल करने की?

+0

क्या आप की कोशिश की है देखते हैं? आप Java serialization, XML, CSV, बाइनरी डेटा मैन्युअल रूप से उपयोग कर सकते हैं ... –

+0

मुझे बस सरल फ़ाइलreader पता है। इसलिए serialization टिप के लिए धन्यवाद। मैं इसे पहले नहीं जानता ... –

उत्तर

15

HashMap लागू करता Serializable ताकि आप सामान्य क्रमबद्धता का उपयोग hashmap लिखने के लिए कर सकते हैं दायर करने के लिए

यहाँ Java - Serialization उदाहरण के लिए कड़ी है

+0

ठीक है धन्यवाद, मैं इसे आजमाउंगा। –

+0

सही। यह काम करता है: डी बहुत बहुत धन्यवाद !!! –

2

आप ObjectOutputStream

में

ObjectOutputStreamwriteObject का उपयोग कर एक फाइल करने के लिए एक वस्तु लिख सकते हैं

31

सबसे सरल समाधान जो मैं सोच सकता हूं वह गुण वर्ग का उपयोग कर रहा है।

Map<String, String> ldapContent = new HashMap<String, String>(); 
Properties properties = new Properties(); 

for (Map.Entry<String,String> entry : ldapContent.entrySet()) { 
    properties.put(entry.getKey(), entry.getValue()); 
} 

properties.store(new FileOutputStream("data.properties"), null); 

मानचित्र लोड:

मानचित्र सहेजा

Map<String, String> ldapContent = new HashMap<String, String>(); 
Properties properties = new Properties(); 
properties.load(new FileInputStream("data.properties")); 

for (String key : properties.stringPropertyNames()) { 
    ldapContent.put(key, properties.get(key).toString()); 
} 

संपादित करें:

अगर अपने नक्शे प्लेन टेक्स्ट मान हैं, वे दृश्यमान होगी किसी के माध्यम से आप खुले फ़ाइल डेटा पाठ संपादक, यदि आप मानचित्र को क्रमबद्ध करते हैं तो यह मामला नहीं है:

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.ser")); 
out.writeObject(ldapContent); 
out.close(); 
,210

EDIT2:

बचत उदाहरण में पाश (के रूप में OldCurmudgeon ने सुझाव दिया) के लिए के बजाय

:

properties.putAll(ldapContent); 

हालांकि, लोड हो रहा है, उदाहरण के लिए यह सबसे अच्छा है कि किया जा सकता है:

ldapContent = new HashMap<Object, Object>(properties); 
+2

'गुण' के रूप में 'मानचित्र' लागू होता है, इसलिए आप इसे 'popAll' का उपयोग करने में सक्षम होना चाहिए। इसके अलावा, चूंकि 'हैश मैप' में 'हैश मैप' है (मानचित्र एम बढ़ाता है) 'कन्स्ट्रक्टर आपको उसी कारण से निर्माण पर इसे पॉप्युलेट करने में सक्षम होना चाहिए। – OldCurmudgeon

+0

मैं सहमत हूं, यह कोड नमूना के लिए समाधान – linski

+0

+1 को सरल बनाता है। धन्यवाद –

14

HashMapSerializable इंटरफ़ेस लागू करता है, तो आप फ़ाइल को Map लिखने के लिए ObjectOutputStream कक्षा का उपयोग कर सकते हैं, और इसेका उपयोग करके फिर से पढ़ सकते हैंवर्ग

सरल कोड के नीचे

कि ObjectOutStream के उपयोग और समझाने ObjectInputStream

import java.util.*; 
import java.io.*; 
public class A{ 

    HashMap<String,String> hm; 
    public A(){ 
     hm=new HashMap<String,String>(); 

     hm.put("1","A"); 
     hm.put("2","B"); 
     hm.put("3","C"); 

     method1(hm); 

    } 

public void method1(HashMap<String,String> map){ 
    //write to file : "fileone" 
    try{ 
    File fileOne=new File("fileone"); 
    FileOutputStream fos=new FileOutputStream(fileOne); 
     ObjectOutputStream oos=new ObjectOutputStream(fos); 

     oos.writeObject(map); 
     oos.flush(); 
     oos.close(); 
     fos.close(); 
    }catch(Exception e){} 

    //read from file 
    try{ 
     File toRead=new File("fileone"); 
     FileInputStream fis=new FileInputStream(toRead); 
     ObjectInputStream ois=new ObjectInputStream(fis); 

     HashMap<String,String> mapInFile=(HashMap<String,String>)ois.readObject(); 

     ois.close(); 
     fis.close(); 
     //print All data in MAP 
     for(Map.Entry<String,String> m :mapInFile.entrySet()){ 
      System.out.println(m.getKey()+" : "+m.getValue()); 
     } 
    }catch(Exception e){} 
    } 

public static void main(String args[]){ 
     new A(); 
} 

} 

या आप डेटा दर्ज करने के लिए पाठ के रूप में आप बस Map के माध्यम से पुनरावृति और लाइन द्वारा कुंजी और मान लाइन लिख सकते हैं लिखने के लिए चाहते हैं, और लाइन लाइन द्वारा इसे फिर से पढ़ा है और करने के लिए HashMap

import java.util.*; 
import java.io.*; 
public class A{ 

    HashMap<String,String> hm; 
    public A(){ 
     hm=new HashMap<String,String>(); 

     hm.put("1","A"); 
     hm.put("2","B"); 
     hm.put("3","C"); 

     method2(hm); 

    } 

public void method2(HashMap<String,String> map){ 
    //write to file : "fileone" 
    try{ 
    File fileTwo=new File("filetwo.txt"); 
    FileOutputStream fos=new FileOutputStream(fileTwo); 
     PrintWriter pw=new PrintWriter(fos); 

     for(Map.Entry<String,String> m :map.entrySet()){ 
      pw.println(m.getKey()+"="+m.getValue()); 
     } 

     pw.flush(); 
     pw.close(); 
     fos.close(); 
    }catch(Exception e){} 

    //read from file 
    try{ 
     File toRead=new File("filetwo.txt"); 
     FileInputStream fis=new FileInputStream(toRead); 

     Scanner sc=new Scanner(fis); 

     HashMap<String,String> mapInFile=new HashMap<String,String>(); 

     //read data from file line by line: 
     String currentLine; 
     while(sc.hasNextLine()){ 
      currentLine=sc.nextLine(); 
      //now tokenize the currentLine: 
      StringTokenizer st=new StringTokenizer(currentLine,"=",false); 
      //put tokens ot currentLine in map 
      mapInFile.put(st.nextToken(),st.nextToken()); 
     } 
     fis.close(); 

     //print All data in MAP 
     for(Map.Entry<String,String> m :mapInFile.entrySet()){ 
      System.out.println(m.getKey()+" : "+m.getValue()); 
     } 
    }catch(Exception e){} 
    } 

public static void main(String args[]){ 
     new A(); 
} 

} 

नोट जोड़ें: उपरोक्त कोड इस कार्य को करने के लिए सबसे तेज़ तरीका नहीं हो सकता है, लेकिन मैं CLA के कुछ आवेदन दिखाना चाहते हैं सत्र

ObjectOutputStream, ObjectInputStream, HashMap, Serializable, StringTokenizer

+0

+1 पूर्ण कोड के लिए चेक करें, धन्यवाद –

+1

आपका स्वागत @ user1671245, मैंने पूरा उदाहरण देने की कोशिश की, और विभिन्न तरीकों को दिखाने के लिए कुछ और वर्गों का उपयोग करने की कोशिश की, मुझे उम्मीद है कि यह आपकी मदद करेगी – Farnabaz

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