package com.levelup.java.io; import static org.junit.Assert.assertTrue; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; import org.junit.Test; import com.google.common.base.Charsets; import com.google.common.io.Files; /** * This java example will demonstrate how to read a text file. * * Effective Java Item 47: Know and use the libraries recommends using library * such as Google Guava or Apache Commons. * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/read-text-file/'>Read * text file</a> * */ public class ReadTextFile { private static final Logger logger = Logger.getLogger(ReadTextFile.class); private static final String FILE_PATH = "youaremysunshine.txt"; @Test public void read_file_with_bufferedreader() { InputStream in = this.getClass().getClassLoader() .getResourceAsStream(FILE_PATH); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); List<String> lines = new ArrayList<String>(); String line = null; try { while ((line = reader.readLine()) != null) { lines.add(line); } } catch (IOException e) { logger.error(e); } finally { try { reader.close(); } catch (IOException e) { logger.error(e); } } assertTrue(lines.size() == 28); } @Test public void read_text_file_with_scanner() { InputStream in = this.getClass().getClassLoader() .getResourceAsStream(FILE_PATH); ArrayList<String> lines = new ArrayList<String>(); Scanner fileScanner = new Scanner(new InputStreamReader(in)); while (fileScanner.hasNextLine()) { lines.add(fileScanner.nextLine()); } fileScanner.close(); assertTrue(lines.size() == 28); } @Test public void read_text_file_with_java8() throws IOException { String filePathAsString = this.getClass().getClassLoader() .getResource(FILE_PATH).getFile(); Path filePath = Paths.get(filePathAsString); List<String> lines = java.nio.file.Files.lines(filePath).collect( Collectors.toList()); assertTrue(lines.size() == 28); } @Test public void read_text_file_with_google_guava() { String filePath = this.getClass().getClassLoader() .getResource(FILE_PATH).getFile(); List<String> lines = null; try { lines = Files.readLines(new File(filePath), Charsets.UTF_8); } catch (IOException e) { logger.error(e); } assertTrue(lines.size() == 28); } @Test public void read_file_with_apache_commons() { String filePath = this.getClass().getClassLoader() .getResource(FILE_PATH).getFile(); List<String> lines = null; try { lines = FileUtils.readLines(new File(filePath)); } catch (IOException e) { logger.error(e); } assertTrue(lines.size() == 28); } }