我有哈希表 html内容是url字符串的html字符串。 我想把hastable写成.text文件。
有人可以建议解决方案吗?
答案 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
的第一个声明和初始化,并将其打印到标准输出而不是文本文件。
java.io.PrintWriter
API
此类中的方法永远不会抛出I / O异常,尽管它的一些构造函数可能会。客户端可以通过调用
out
来查询是否发生了任何错误。
答案 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库,但我认为这个符合您的需求。