Zastąpienie java.io przez java.nio

0

Witam,
Chciałbym się dowiedzieć od doświadczonych osób w jaki sposób mogę zastąpić w moim projekcie bibliotekę java.io przez java.nio.
Nie zależy mi na konkretnym rozwiązaniu, jedynie na sugestiach jakich klas użyć.

package pl.edu.agh.jtp;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

public class BookReader {

	private StringBuilder sBuilder = new StringBuilder();
	private FileReader fileRead = null;
	private String line = "";
	private static final Logger logger = Logger.getLogger(BookReader.class);

	public String buildString(String filePath) {

		try {
			fileRead = new FileReader(filePath);
		} catch (FileNotFoundException e) {
			System.out.println(e.toString());
			System.out.println(filePath);
		}

		BufferedReader buffRead = new BufferedReader(fileRead);

		try {
			while ((line = buffRead.readLine()) != null) {
				sBuilder.append(line + " ");
				logger.info(line + "was added");
			}
		} catch (IOException e) {
			System.out.println(e.toString());
		}

		try {
			fileRead.close();
		} catch (IOException e) {
			System.out.println(e.toString());
		}
		logger.info(sBuilder.toString());
		return sBuilder.toString();
	}

	public List<String> createWordList(String input) {
		List<String> wordList = new ArrayList<>();
		wordList = Arrays.asList(input.split("\\s+"));
		return wordList;
	}

	public static void main(String[] args) {
		Path p = Paths.get("TestBook.txt");
		BookReader bReader = new BookReader();
		String input = bReader.buildString(p.toString());
		Map<String, Integer> result = StringFrequency.countString(bReader.createWordList(input));
		System.out.print(result.toString());
	}

}

Z góry dziękuję za pomoc i pozdrawiam.

1

Chociażby do odczytania tesktu z pliku

Files.readAllLines(Path path, Charset cs)

http://www.java2s.com/Tutorials/Java/java.nio.file/Files/Java_Files_readAllLines_Path_path_Charset_cs_.htm

2

Files.lines() + map() + collect() + Collectors.toList()
a cały ten word count możesz zrobić poprzez Collectors.groupingBy() zamiast zbierania danych do listy.
edit:

        Map<String, Long> countingMap = Files.lines(Paths.get("teksty.txt"))
                .flatMap(line -> Arrays.stream(line.split("\\s+")))
                .collect(Collectors.groupingBy(
                        Function.identity(),
                        Collectors.counting()
                ));
0

Ależ nie godzi się tak nieoptymalnie! ;P Files.lines() od razu daje Stream<String>.

1 użytkowników online, w tym zalogowanych: 0, gości: 1