如何将哈希表<string,string =“”>写入文本文件,java?</string,>

时间:2010-05-07 03:35:39

标签: java hashtable

我有哈希表 html内容是url字符串的html字符串。 我想把hastable写成.text文件。

有人可以建议解决方案吗?

6 个答案:

答案 0 :(得分:3)

每个条目的一行怎么样,两个字符串用逗号分隔?有点像:

"key1","value1"
"key2","value2"
...
"keyn","valuen"

保留引号,你也可以写出引用空条目的键,比如

"key", null

要实际生成表,您可能希望使用类似于以下的代码:

public void write(OutputStreamWriter out, HashTable<String, String> table)
throws IOException {
  String eol = System.getProperty("line.separator");
  for (String key: table.keySet()) {
    out.write("\"");
    out.write(key);
    out.write("\",\"");
    out.write(String.valueOf(table.get(key)));
    out.write("\"");
    out.write(eol);
  }
  out.flush();
}

答案 1 :(得分:3)

对于I / O部件,您可以使用new PrintWriter(new File(filename))。只需像println那样调用System.out方法,然后不要忘记close()。确保妥善处理任何IOException

如果你有一个特定的格式,你必须解释它,但是Hashtable.entrySet()上的一个简单for-each循环就是你需要迭代{{1}的条目}。

顺便说一下,如果您不需要Hashtable功能,则HashMap<String,String>可能会比synchronized更好。

相关问题


以下是将事物放在一起的简单示例,但为了清晰起见省略了强大的Hashtable处理,并使用了简单的格式:

IOException

在我的机器上运行此操作会生成包含三行的import java.io.*; import java.util.*; public class HashMapText { public static void main(String[] args) throws IOException { //PrintWriter out = new PrintWriter(System.out); PrintWriter out = new PrintWriter(new File("map.txt")); Map<String,String> map = new HashMap<String,String>(); map.put("1111", "One"); map.put("2222", "Two"); map.put(null, null); for (Map.Entry<String,String> entry : map.entrySet()) { out.println(entry.getKey() + "\t=>\t" + entry.getValue()); } out.close(); } }

map.txt

作为奖励,您可以使用null => null 2222 => Two 1111 => One 的第一个声明和初始化,并将其打印到标准输出而不是文本文件。

另见

答案 2 :(得分:1)

对于文本表示,我建议选择一些不太可能出现在字符串中的字符,然后输出一个CSV格式文件,其中包含这些字符作为分隔符,引号,终结符和转义符。本质上,每一行(由终结符指定,否则在任一字符串中可能有行结束字符)将第一个CSV“字段”作为哈希表中条目的键,作为第二个字段,值为它

沿着相同的路线采用更简单的方法是将一个任意字符(比如反斜杠\)指定为转义字符。当它们出现在任一字符串中时,你必须加倍反斜杠,并以转义形式表示标签(\t)和行尾('\n);然后你可以使用一个真实的(不是转义序列)制表符作为两个字段(键和值)之间的字段分隔符,以及每行末尾的实际(不是转义序列)行尾。

答案 3 :(得分:1)

import java.io.*;
class FileWrite 
{
   public static void main(String args[])
  {
    HashTable table = //get the table
    try{
        // Create file 
        BufferedWriter writer = new BufferedWriter(new FileWriter("out.txt"));
        writer.write(table.toString());
    }catch (Exception e){
        e.printStackTrace();
    }finally{
      out.close();
    }
  }
}

答案 4 :(得分:1)

你可以尝试

public static void save(String filename, Map<String, String> hashtable) throws IOException {
    Properties prop = new Properties();
    prop.putAll(hashtable);
    FileOutputStream fos = new FileOutputStream(filename);
    try {
       prop.store(fos, prop);
    } finally {
       fos.close();
    }
}

这将哈希表(或任何Map)存储为属性文件。您可以使用Properties类重新加载数据。

答案 5 :(得分:1)

由于您对文件格式没有任何要求,我不会创建自定义格式。只需使用标准的东西。我建议使用json!

替代品包括xml和csv,但我认为json是最好的选择。 Csv不处理复杂类型,例如在地图的一个键中有一个列表,xml编码/解码可能非常复杂。

json-simple为例:

String serialized = JSONValue.toJSONString(yourMap);

然后只需将字符串保存到您的文件中(使用Apache Commons IO的域名不是特定的):

FileUtils.writeStringToFile(new File(yourFilePath), serialized);

要阅读文件:

Map map = (JSONObject) JSONValue.parse(FileUtils.readFileToString(new File(yourFilePath));

您也可以使用其他json库,但我认为这个符合您的需求。