2012-10-05 34 views
11

İki Dizgiler Map<String, String> ldapContent = new HashMap<String, String> ile bir HashMap sahibim.HashMap ile dosya nasıl yazılır ve okunur?

Şimdi

Peki nasıl Map daha sonra tekrar kullanmak kaydetmeniz gerekir ... Tekrar başlatılıyor olmadan sonradan Map kullanmak için harici bir dosyada Map kaydetmek istediğiniz?

+0

Ne denedi, gördünüz mü? Java serileştirme, XML, CSV, ikili veriyi manuel olarak kullanabilirsiniz ... –

+0

Sadece basit filereader biliyorum. Bu nedenle serileştirme ipucu için teşekkür ederiz. Daha önce bilmiyorum ... –

cevap

15

HashMapSerializable böylece İşte

Java - Serialization örneğin link dosya hashmap yazmak için normal bir seri kullanabilirsiniz uygulayan

Sen

ObjectOutputStream ObjectOutputStream

yılında writeObject kullanarak bir dosyaya bir nesneyi yazabilirsiniz
+0

tamam teşekkürler, deneyeceğim. –

+0

mükemmel. çalışır: D çok teşekkür ederim !!! –

31

Düşünebildiğim en basit çözüm, Properties sınıfını kullanmaktır.Harita yükleniyor

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); 

:

haritası kaydediliyor

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()); 
} 

DÜZENLEME: Harita düz metin değerlerini içeriyorsa

, onlar görünür olacaktır eğer herhangi biriyle Eğer açık dosya verileri Eğer haritayı serileştirirseniz, metin editörü, böyle bir durum söz konusu değil:

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

EDIT2:

yerine tasarruf örnekte (OldCurmudgeon tarafından önerilen) döngü için

:

properties.putAll(ldapContent); 

ancak yükleme Örneğin bu yapılabilir ki en iyisi:

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

'Properties'' 'Map' uygulamasını uygularken' putAll''i kullanabilmeniz gerekir. Ayrıca, HashMap'in bir HashMap'i olduğundan (Map m'yi genişletir) kurucuya aynı nedenden ötürü inşaatı yapabilmeniz gerekir. – OldCurmudgeon

+0

Kabul ediyorum, kod örneği için – linski

+0

+1 çözümünü basitleştiriyor. teşekkürler –

14

HashMap, Serializable arabirimini uygular venumaralı dosyayı kullanaraksınıfını yalnızca Map yazıpkullanarak yeniden okuyabilirsiniz. ObjectOutStream kullanımını ve açıklamak basit kodunun altınasınıf

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(); 
} 

} 

veya basitçe Map yineleme ve çizgi ile anahtar ve değer hattını yazabilir dosya metin olarak veri yazmak istiyorsanız, ve satır satır tekrar okumak ve 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(); 
} 

} 

nOT eklemek: kod bu görevi yapıyor en hızlı yolu olmayabilir, ama clas bazı uygulama göstermek istiyoruz yukarıdaki

ses

ObjectOutputStream, ObjectInputStream, HashMap, Serializable, StringTokenizer

+0

+1, –

+1

hoşgeldiniz @ user1671245, ben tam örnek vermeye çalıştım ve farklı yollar göstermek için bazı sınıflar kullanın, umarım size yardımcı olur – Farnabaz

İlgili konular