Я создаю программу, которая берет два файла .txt и распечатывает слова, которые появляются в обоих текстах, и количество раз, когда каждое общее слово появляется в каждом тексте. Я объявил два файловых объекта, которые имеют допустимые пути. Однако, когда я пытаюсь создать два объекта Scanner, которые используют два файла .txt, я получаю ошибки компилятора FileNotFoundException для обеих строк кода, которые объявляют новые объекты Scanner.
К вашему сведению, я использую scannerObject.hasNext () через некоторое время l oop, который добавляет каждое слово из scannerObject.Next () в качестве нового ключа в переменную HashMap со значением 1 или, если слово уже является ключом в HashMap, увеличивая значение (число вхождений) на 1.
Я попытался выполнить следующее с обоими путями к файлам, и простая программа, показанная ниже, запускается без ошибок и выдает «Это сработало! Хехехе» ":
import java.io.*;
import java.util.*;
public class readingFilesPractice {
public static void main(String[] args) {
try{
File x = new File("C:\\Users\\aravd.000\\Desktop\\Book1.txt");
Scanner sc = new Scanner(x);
while(sc.hasNext()){
System.out.println(sc.next());
}
sc.close();
System.out.println("It worked! Hehehe");
}
catch (Exception e){
System.out.println("Error!");
}
}
}
Кстати, в файлах .txt есть области, в которых есть несколько пробелов подряд, и такие вещи, как" 1. ".
Приведенный ниже код разбивается на две FileNotFoundExceptions ( без блоков try и catch) и в Visual Stud ios, new Scanner(book1)
и new Scanner(book2)
имеют красную волнистую линию, которая сообщает «Необработанный тип исключения FileNotFoundException Java (16777384)» при наведении на него курсора мыши. Мой полный код для справки приведен ниже.
import java.io.*;
import java.util.*;
public class program1 {
public static void main(String[] args) {
try {
File book1 = new File("C:\\Users\\aravd.000\\Desktop\\Book1.txt");
File book2 = new File("C:\\Users\\aravd.000\\Desktop\\Book2.txt");
// Counting the number of occurences of each word in book1
Scanner readBook1 = new Scanner(book1);
HashMap<String, Integer> wordsInBook1 = new HashMap<String, Integer>();
while (readBook1.hasNext()) {
String word = readBook1.next();
if (wordsInBook1.containsKey(word)) {
int occurences = wordsInBook1.get(word) + 1;
wordsInBook1.put(word, occurences);
} else {
wordsInBook1.put(word, 1);
}
}
readBook1.close();
// Counting the number of occurences of each word in book2
Scanner readBook2 = new Scanner(book2);
HashMap<String, Integer> wordsInBook2 = new HashMap<String, Integer>();
while (readBook2.hasNext()) {
String word = readBook2.next();
if (wordsInBook2.containsKey(word)) {
int occurences = wordsInBook2.get(word) + 1;
wordsInBook2.put(word, occurences);
} else {
wordsInBook2.put(word, 1);
}
}
readBook2.close();
// Creating two iterators for each HashMap
Iterator wordsInB1Iter = wordsInBook1.entrySet().iterator();
Iterator wordsInB2Iter = wordsInBook2.entrySet().iterator();
// Running the wordsInB1Iter iterator to find and delete unique keys in
// wordsInBook1
while (wordsInB1Iter.hasNext()) {
Map.Entry pair = (Map.Entry) wordsInB1Iter.next();
if (!wordsInBook2.containsKey(pair.getKey())) {
wordsInBook1.remove(pair.getKey());
}
}
// Running the wordsInB2Iter iterator to find and delete unique keys
while (wordsInB2Iter.hasNext()) {
Map.Entry pair = (Map.Entry) wordsInB2Iter.next();
if (!wordsInBook1.containsKey(pair.getKey())) {
wordsInBook2.remove(pair.getKey());
}
}
System.out.println(wordsInBook1);
System.out.println(wordsInBook2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Если другие части кода будут повреждены, я не буду знать, потому что я еще не отлаживал это. Если вы найдете ошибку в другом месте, дайте мне знать, если хотите. Спасибо за ваши усилия и, пожалуйста, дайте мне знать, если есть что-то, что требует дальнейшего разъяснения!
ОБНОВЛЕНИЕ: Когда я изменил свой блок catch на Exception e и использовал e.printStackTrace, мой код вывел следующее:
java.util.ConcurrentModificationException
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1493)
at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1526)
at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1524)
at prorgam1.main(program1.java:50)
Ссылка на описания ошибок на вкладке «ПРОБЛЕМЫ» в VisualStud ios
На рисунке выше может быть предоставлена более подробная информация о проблемах с моими итераторами и HashMaps.