我有一个哈希表,htmlcontent是urlstring的html字符串。
我想把哈希表写入一个文本文件中。
有人能提供一个解决方案吗?
"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();
}
new PrintWriter(new File(filename))
。像使用System.out
一样调用println
方法,别忘了在之后调用close()
。确保优雅地处理任何IOException
。Hashtable.entrySet()
上的简单for-each
循环即可遍历Hashtable
的条目。synchronized
功能,则HashMap<String,String>
可能比Hashtable
更好。
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()
来查询是否发生任何错误。
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();
}
}
这将哈希表(或任何映射)存储为属性文件。您可以使用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 库,但我认为这个库更适合你的需求。
对于文本表示,我建议选择一些在字符串中非常不可能出现的字符,然后输出一个CSV格式文件,其中这些字符作为分隔符、引号、终止符和转义符。基本上,每一行(由终止符指定)将具有哈希表条目的键作为第一个CSV“字段”,值作为第二个字段。
同样的思路还有一种更简单的方法,就是将一个任意字符(比如反斜杠\
)指定为转义字符。当它们出现在任何一个字符串中时,你必须将反斜杠加倍,并以转义形式表示制表符(\t
)和换行符('\n
);然后你可以使用真正的(而不是转义序列)制表符作为两个字段(键和值)之间的字段分隔符,并在每行末尾使用真正的(而不是转义序列)换行符。