Ich habe eine harte Zeit. Ich versuche, eine Zuweisung zu beenden, in der auf ein Verzeichnis von Dateien zugegriffen wird und die Dateien zählen, dann werden die Dateien selbst gelesen und die Wörter werden in jeder Datei gezählt. Dies ist die Fortsetzung einer Frage, die ich geschrieben habe, aber die „Antworten“ nicht helfen, mein Problem bei allen (How to count words in a text file, java 8-style)Wie man Dateien zählen und Wörter in einer Reihe von Dateien zählen Mit Java 8 und Streams
Das ist das Problem Umriss zu beheben:
Schreiben Sie ein Programm, das verwendet Streams effizient zählen die Wörter unterschiedlicher Länge erscheinen in einer Reihe von Dateien (files.zip). Ihre Ausgabe sieht folgendermaßen aus: (Die Zahlen dienen nur zur Illustration).
Count 11 files:
word length: 1 ==> 80
word length: 2 ==> 321
word length: 3 ==> 643
Instead, I got the following output:
primes.txt
Count: 1 files
Dies ist der Code, den ich geschrieben habe. Ich habe zwei Klassen Filereader verwendet, die die Hauptklasse ist, die ein Verzeichnis „Dateien mit dem Namen lautet:.
FileReader.java
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author
*/
public class FileReader {
public static void main(String args[]) {
List<String> fileNames = new ArrayList<>();
try {
DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get("files"));
int fileCounter = 0;
**WordReader wordCnt = new WordReader();**
for (Path path : directoryStream) {
System.out.println(path.getFileName());
fileCounter++;
fileNames.add(path.getFileName().toString());
**System.out.println("word length: " + fileCounter + " ==> "
+ wordCnt.count(path.getFileName().toString()));**
}
} catch (IOException ex) {
}
System.out.println("Count: " + fileNames.size() + " files");
}
}
Und die WordReader Klasse, die in der Theorie sollte die Worte in jeder Datei im Verzeichnis zählt die Klasse in in Lambda-Syntax geschrieben:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.AbstractMap.SimpleEntry;
import java.util.Arrays;
import java.util.Map;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
/**
*
* @author
*/
public class WordReader {
/**
*
* @param filename
* @return
* @throws java.io.IOException
*/
public Map<String, Long> count(String filename) throws IOException {
//Stream<String> lines = Files.lines(Paths.get(filename));
Path path = Paths.get(":");
Map<String, Long> wordMap = Files.lines(path)
.parallel()
.flatMap(line -> Arrays.stream(line.trim().split(" ")))
.map(word -> word.replaceAll("[^a-zA-Z]", "").toLowerCase().trim())
.filter(word -> word.length() > 0)
.map(word -> new SimpleEntry<>(word, 1))
//.collect(Collectors.toMap(s -> s, s -> 1, Integer::sum));
.collect(groupingBy(SimpleEntry::getKey, counting()));
wordMap.forEach((k, v) -> System.out.println(String.format(k,v)));
return wordMap;
}
}
ich glaube, ich habe ein Problem mit der WordReader Klasse aufrufen (Hervorgehoben in BOLD), die den Zähler stoppt, aber ich weiß nicht, wie es zu lösen, und ich habe versucht, um den Klassenaufruf ohne Erfolg in die for-Schleife zu verschieben Wenn ich die Zeilen auskommentiere, dann läuft der Dateizähler gut weiß jemand, dass ich tun kann, um dieses Programm "laufen zu lassen (Dateien zählen) und Kaugummi zu kauen (Wörter in Dateien zählen)"?
Du bist wahrscheinlich eine Ausnahme, dass die Datei „bekommen: "existiert nicht, check' Path path = Paths.get (":"); '. – Edwardth
tat ich, aber selbst wenn ich eine tatsächliche Datei Ex: haiku.txt eingeben, passiert das Gleiche. –
Drucken Sie die Ausnahme, die Sie in Main fangen mit 'ex.printStackTrace();' – Edwardth