Во-первых, поймите проблему. Если бы каждый файл в вашем каталоге начинался с точки, ваша TreeMap была бы пустой. Но что произойдет, если firstMap.get (i) и firstMap не содержат ключ i?
Документация для Map (интерфейс, который реализует TreeMap) сообщает вам:
V get (ключ объекта):
Возвращает значение, которому сопоставлен указанный ключ, или значение NULL, если эта карта не содержит сопоставления для ключа.
Таким образом, если ключ не найден в вашем TreeMap, tempBr будет нулевым. Затем, когда вы вызываете tempBr.readLine (), вы получаете исключение NullPointerException, потому что у null нет метода readLine () или любого другого метода.
BufferedReader tempBr = firstMap.get(i);
String line = tempBr.readLine();
Решение:
Хотя вы можете сделать это с помощью Map, ArrayList или LinkedList кажутся более естественным выбором. Это похоже на домашнее задание, поэтому я не даю вам точный код для решения вашей проблемы. Вот пример, который иллюстрирует вашу проблему и ее решение.
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class MyClass {
static final String[] fileNames = {"a", ".b", "c", ".d", "e", ".f"};
public static void main(String[] args) {
incorrect();
corrected();
improved();
}
public static void incorrect() {
Map<Integer, String> myMap = new TreeMap<Integer, String>();
for (int i = 0; i < fileNames.length; i++) {
if (!fileNames[i].startsWith(".")) {
myMap.put(i, fileNames[i]);
}
}
System.out.println(myMap);
for (int i = 0; i < fileNames.length; i++) {
System.out.println(myMap.get(i));
}
}
public static void corrected() {
Map<Integer, String> myMap = new TreeMap<Integer, String>();
for (int i = 0; i < fileNames.length; i++) {
if (!fileNames[i].startsWith(".")) {
myMap.put(i, fileNames[i]);
}
}
System.out.println(myMap);
for (int i = 0; i < fileNames.length; i++) {
if (myMap.containsKey(i)) {
System.out.println(myMap.get(i));
}
}
}
public static void improved() {
List<String> myList = new ArrayList<String>();
for (String fileName : fileNames) {
if (!fileName.startsWith(".")) {
myList.add(fileName);
}
}
System.out.println(myList);
for (String fileName : myList) {
System.out.println(fileName);
}
}