Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写哈希表<;字符串,字符串>;在文本文件中,java?_Java_Hashtable - Fatal编程技术网

如何编写哈希表<;字符串,字符串>;在文本文件中,java?

如何编写哈希表<;字符串,字符串>;在文本文件中,java?,java,hashtable,Java,Hashtable,我有一张桌子 htmlcontent是URL字符串的html字符串。 我想将hastable写入.text文件 有人能提出解决方案吗?每个条目一行,用逗号分隔两个字符串怎么样?有点像: "key1","value1" "key2","value2" ... "keyn","valuen" 保留引号,您也可以写出引用空条目的键,如 "key", null 要实际生成表,您可能需要使用类似以下代码: public void write(OutputStreamWriter out, HashTa

我有一张桌子 htmlcontent是URL字符串的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();
}
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));