如何编写哈希表<;字符串,字符串>;在文本文件中,java?
我有一张桌子 htmlcontent是URL字符串的html字符串。 我想将hastable写入.text文件如何编写哈希表<;字符串,字符串>;在文本文件中,java?,java,hashtable,Java,Hashtable,我有一张桌子 htmlcontent是URL字符串的html字符串。 我想将hastable写入.text文件 有人能提出解决方案吗?每个条目一行,用逗号分隔两个字符串怎么样?有点像: "key1","value1" "key2","value2" ... "keyn","valuen" 保留引号,您也可以写出引用空条目的键,如 "key", null 要实际生成表,您可能需要使用类似以下代码: public void write(OutputStreamWriter out, HashTa
有人能提出解决方案吗?每个条目一行,用逗号分隔两个字符串怎么样?有点像:
"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();
}
public void write(OutputStreamWriter out,哈希表)
抛出IOException{
字符串eol=System.getProperty(“line.separator”);
for(字符串键:table.keySet()){
out.写出(“\”);
写出(键);
写出(“\”,“\”);
out.write(String.valueOf(table.get(key));
out.写出(“\”);
输出。写入(eol);
}
out.flush();
}
对于I/O部分,您可以使用。只需像调用System.out
那样调用println
方法,然后不要忘记关闭()。确保您优雅地处理任何IOException
如果您有一个特定的格式,就必须对其进行解释,否则,只需对上的每个循环执行一个简单的,就可以遍历哈希表的条目
顺便说一下,如果您不需要synchronized
功能,那么使用哈希表可能比使用哈希表更好
相关问题
下面是一个简单的示例,说明如何将内容放在一起,但为了清晰起见,省略了健壮的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();
}
}
作为奖励,您可以使用out
的第一次声明和初始化,并将其打印到标准输出,而不是文本文件
另见
-
此类中的方法从不抛出I/O异常,尽管它的一些构造函数可能会抛出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();
}
}
publicstaticvoidsave(字符串文件名,映射哈希表)引发IOException{
Properties prop=新属性();
prop.putAll(哈希表);
FileOutputStream fos=新的FileOutputStream(文件名);
试一试{
道具仓库(fos,道具);
}最后{
fos.close();
}
}
这将哈希表(或任何映射)存储为属性文件。您可以使用Properties类再次加载数据。因为您对文件格式没有任何要求,所以我不会创建自定义文件格式。用一些标准的东西。我建议使用json
备选方案包括xml和csv,但我认为json是最好的选择。Csv不能处理复杂的类型,比如在地图的一个键中有一个列表,xml编码/解码可能非常复杂
例如:
String serialized = JSONValue.toJSONString(yourMap);
然后将字符串保存到您的文件中(使用Apache Commons IO也不特定于您的域):
要读取文件,请执行以下操作:
Map map = (JSONObject) JSONValue.parse(FileUtils.readFileToString(new File(yourFilePath));
您也可以使用其他json库,但我认为这一库适合您的需要。它有一个错误BufferedWriter类型中的方法write(int)不适用于参数(哈希表)哦,对不起。更新了答案。这是一种打印hastable的方法,但我的意思是将hashtable写入txt文件,我使用BufferedWriter=newbufferedwriter(newfilewriter(resultoutfile));writer.write(googleHashTableResult);但是它有一个错误:erro类型BufferedWriter中的方法write(int)不适用于Arguments FileWriter是OutputStreamWriter的子类。BufferedWriter不是。不要传入BufferedWriter,传入FileWriter。如果这不是你想要的,那么相应地调整代码。谢谢你的回复,我已经接近你说的了!类似OutputStreamWriter的东西=新的OutputStreamWriter(os);BufferedWriter buffer=新的BufferedWriter(写入程序);for(条目obj:googleHashTableResult.entrySet(){writer.write(obj.getKey());writer.write(换行符);writer.write(obj.getValue();}writer.close();buffer.close();这将在引用带有NullPointerException的null条目的键上失败。请记住,映射的键引用的条目可能为空。感谢您的更新。一定是因为编码过于保守,这通常不是一件坏事。好的,谢谢你的回复。我有一个关于琼森阵列的问题。当我使用GoogleAPI查询字符串并得到结果时。String serialized=JSONValue.toJSONString(yourMap);但是当我展示Jeditor的结果时,它不能显示uicode(越南语),但是yahoo seach reult可以。显示谷歌搜索结果的编码是什么?如果结果是越南语,我怎么能公布呢?tiendv,很抱歉回答得太晚了。这是另一个问题,你应该在这里回答一个问题,并为这个问题打开一个不同的问题。干杯,谢谢!这救了我一天!
FileUtils.writeStringToFile(new File(yourFilePath), serialized);
Map map = (JSONObject) JSONValue.parse(FileUtils.readFileToString(new File(yourFilePath));