对File.getName()进行静态引用会引发错误

时间:2015-12-01 05:59:46

标签: java hashmap

在你投票之前,因为你认为这是“对非静态......进行静态引用”的另一个副本,请阅读整个问题。

我正在编写一个基本上通过目录并提取所有.txt文件的程序。事实上,我实际上使用过this  SO线程帮助我。我的代码一直在工作,除了线程中没有涉及的一件事。将收集的一些信息添加到HashMap。在我的程序中,我使用HashMap将名称作为键存储,并将文件对象存储为值。

哈希映射如下:

private  HashMap<String, Essay> locations;

此哈希映射表示每个文件的位置,以及对象“Essays”,其中包含有关该文件的更多信息。

我的main方法包含查看文件是否为txt的逻辑,如果是,则将其添加到HashMap位置。

public void indexEachFile(){
    for (File file : directory.listFiles()){
        if (file.getName().endsWith(".txt") && file.isFile()){
            //If it is a txt
            locations.put(File.getName(), new Essay()); //Bad line of code
        }
    }
}

将名称和新对象添加到哈希映射的行会引发错误:

  

无法对非静态方法getName()进行静态引用   类型文件

我完全理解该函数是非静态的。

我不明白为什么getName()的引用是静态的。有没有更好的方法来实现对HashMap的添加不会引发错误?

编辑:现在我意识到我的问题源于一个小错误,这改变了我想要做的事情。

1 个答案:

答案 0 :(得分:3)

你需要更改&#39; F&#39;这是因为你没有在循环迭代中引用文件对象。而是使用File类,将其转换为静态调用。

        locations.put(File.getName(), new Essay()); //Bad line of code

像这样改变:

        locations.put(file.getName(), new Essay()); //should be a good line of code now