使用filename作为键创建HashMap,将filecontent作为值创建

时间:2015-08-04 03:46:20

标签: java file hashmap

我的本​​地文件夹中有几个文件。我想将文件名作为键存储,并将相应文件的内容存储为值。

HashMap<String,String> hm = new HashMap<String,String>();
hm.put(filename,filecontent);

有人能告诉我这是正确的方法吗?

3 个答案:

答案 0 :(得分:2)

将文件内容存储为String时,必须确保编码得到遵守,我建议使用字节数组:

Map<String, byte[]> hm = new HashMap<String, byte[]>();

:根据您操作的文件数量,您可能需要考虑使用文件流以避免将所有内容保留在内存中。

答案 1 :(得分:0)

您想要的是几个步骤。

我假设您已将文件名设为String

HashMap<String, byte[]> hm = new HashMap<String, byte[]>(); //Initialize our hashmap with String as key, and byte array as data (binary data)
FileInputStream fileStream = new FileInputStream(filename); //Get a stream of the file
byte[] buff = new byte[512]; //A buffer for our read loop
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); //Where to write buff content to, we can convert this into the output byte array with toByteArray()
while(fileStream.read(buff) > 0) { //read 512 bytes of file at a time, until end of file
    byteStream.write(buff); //write buff content to byte stream
}
fileStream.close(); //Close our file handle, if we don't do this we may not be able to see changes!
hm.put(filename, byteStream.toByteArray()); //insert filename and filecontent to hashmap

然而,正如其他人所说,这不太理想。您在内存中保存多个文件一段任意时间。你可以吃掉很多ram并且没有意识到这样做,并且很快就会遇到内存异常。

你最好只在需要的时候阅读文件内容,所以没有一个整个文件坐在你的公羊里,因为上帝知道多久。我可以看到存储文件内容的唯一合理的原因是,如果你正在阅读它,你可以负担ram将文件缓存在内存中。

答案 2 :(得分:0)

二进制数据更新

HashMap<String,String> hm = new HashMap<String, byte[]>();    
    final File folder = new File("/home/you/Desktop");
            listFilesForFolder(folder);   

public void listFilesForFolder(final File folder) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFilesForFolder(fileEntry);
            } else {
                String name = fileEntry.getName();
                 byte[] fileData = new byte[(int) fileEntry.length()];
                 DataInputStream dis = new DataInputStream(new FileInputStream(fileEntry));
                 dis.readFully(fileData);
                 dis.close();
                 hm.put(name,fileData);
            }
        }
    }

针对OP的Zip文件进行了测试:

public static void main(String[] args) throws FileNotFoundException, IOException {
        File file = new File("D:\\try.zip");
        System.out.println(file.length());
        byte[] fileData = new byte[(int) file.length()];
        DataInputStream dis = new DataInputStream(new FileInputStream(file));
        dis.readFully(fileData);
        dis.close();

    }