2015-12-01 3 views
0

Перед тем, как вы опустили верх, потому что вы воспринимаете это как еще один дубликат «создания статической ссылки на нестатический ...», прочитайте весь вопрос.Создание статической ссылки на File.getName() вызывает ошибку

Я пишу программу, которая в основном проходит через каталог и вытаскивает все файлы .txt. Фактически, я фактически использовал this SO нить, чтобы помочь мне. Мой код работает, за исключением одной вещи, которая не покрыта потоком. Добавление некоторой информации, собранной в HashMap. В моей программе я использую HashMap для хранения имени в качестве ключа и файла, который я сделал в качестве значения.

хэш-карта выглядит следующим образом:

private HashMap<String, Essay> locations; 

Этот хэш-карта представляет местоположение каждого файла, вместе с объектом «Очерков», который имеет больше информации о файле.

Мой главный метод содержит логику, чтобы увидеть, является ли файл 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 
     } 
    } 
} 

линия, где имя и новый объект добавляются в хэше-карту бросает ошибку:

Cannot make a static reference to the non-static method getName() from the type File

Я полностью понимает, что функция не является статичной.

Я не понимаю, почему ссылка на getName() является статической. Есть ли лучший способ реализовать это дополнение к HashMap, которое не вызывает ошибку?

EDIT: Теперь я понял, что моя проблема связана с небольшой ошибкой, которая изменила то, что я пытался сделать.

+0

Возможный дубликат [Что является причиной «не статический метод не может ссылаться из статического контекста»] (http://stackoverflow.com/ вопросы/290884/what-is-the-reason-behind-non-static-method-не может быть ссылкой-из-статического) –

+0

Независимо от вашей «проблемы с HashMap» вы делаете статические ссылки на экземпляр класса файла .... –

ответ

3

Здесь вы должны изменить регистр «F», потому что вы не имеете в виду объект файла в итерации цикла. Вместо этого вы используете класс 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 
+0

Perfect. Спасибо за объяснение! Теперь это имеет больше смысла. – intboolstring