[英]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
的第一个声明和初始化,并将其打印到标准输出而不是文本文件。
java.io.PrintWriter
API
此类中的方法永远不会抛出I / O异常,尽管它的一些构造函数可能会。 客户端可以通过调用
checkError()
来查询是否发生了任何错误。
对于文本表示,我建议选择一些不太可能出现在字符串中的字符,然后输出一个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.