繁体   English   中英

如何编写哈希表 <string, string > 在文本文件中,java?

[英]How to write a hashtable<string, string > in to text file,java?

我有hastable htmlcontent是urlstring的html字符串。 我想把hastable写成.text文件。

谁有人建议解决方案?

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

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

对于I / O部分,您可以使用new PrintWriter(new File(filename)) 只需调用println方法,就像您System.out ,不要忘记close()它之后。 确保正常处理任何IOException

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

顺便说一句,如果您不需要synchronized功能, HashMap<String,String>可能会比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

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

也可以看看

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

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

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

你可以试试

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类重新加载数据。

由于您对文件格式没有任何要求,因此我不会创建自定义格式。 只需使用标准的东西。 我建议使用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库,但我认为这个适合您的需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM