Over a million developers have joined DZone.

How to process stream and read text file in Java 8

DZone's Guide to

How to process stream and read text file in Java 8

· Java Zone ·
Free Resource

Get the Edge with a Professional Java IDE. 30-day free trial.

I have converted one of my old utility class using latest Java8. I use this often to print content of manifest file to check any mysterious jar file for version etc. Just run "java ztools.PrintJar /path/to/my.jar" to see output. In the new code, you will see how I use the Java 8 stream processing to filter what I need from an Enumeration list, and then get the optional result if there is any. And then the BufferedReader now comes with "lines()" method that also do streaming. It's pretty cool to see Java 8 in actions!

package ztools;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Optional;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

 * Print text based resource file inside a jar file. (eg: META-INF/MANIFEST.MF)
 * @author Zemian Deng
public class PrintJar {
  public static void main(String[] args) throws Exception {
  // Search given name in a jar
  JarFile jarFile = new JarFile(args[0]);
  final String searchName = (args.length >= 2) ? args[1] : "META-INF/MANIFEST.MF";
  Optional<JarEntry> searchResult = jarFile
  .filter(e -> e.getName().equals(searchName))
  if (!searchResult.isPresent())
  throw new RuntimeException(searchName + " not found!");
  // Print the JarEntry
  JarEntry entry = searchResult.get();
  try (InputStream instream = jarFile.getInputStream(entry)) {
  BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
  reader.lines().forEach(line -> System.out.println(line));

Get the Java IDE that understands code & makes developing enjoyable. Level up your code with IntelliJ IDEA. Download the free trial.


Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}