Monday, April 11, 2016

Java Recipe: Read resource file as a String.

This recipe shows how to load the file from the resource folder and receive it's content as a String.

Project structure

|--src
|  \--main
|       \--java
|       \--resources 
|          |--lines.json

Get file path from resources folder

In order to receive the resource with given name we need to use java.lang.ClassLoader:
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource(filename); 
Path replaces File for a representation of a file or directory.
Paths.get() lets you create a Path object.
We could receive proper Path instance from URL via Paths.get(uri) method:
Path path = Paths.get(loader.getResource(filename).toURI());
Whatchout: if you will use loader.getResource(name).getPath() or .getPath()it'd return url with leading /
/C:/my-project/target/classes/lines.json
Via using .toString() output would be:
file:/C:/my-project/target/classes/lines.json


Using the paths above might cause nio.file.InvalidPathException.

Read file as a String

JDK7 Files API methods work on instances of Path objects.
You can use the methods in the File class to check the existence of the file corresponding to the Path, create the file, open it, delete it, change its permissions, and so on.
Using Buffered I/O is more efficient, since the native API is called only when buffer is empty, instead of triggering expensive operations (disk access, network activity, etc.) each time.

    public String readFileAsString(String filename) throws URISyntaxException {
      ClassLoader loader = Thread.currentThread().getContextClassLoader();
      Path path = Paths.get(loader.getResource(filename).toURI());
      
      try(BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
        StringBuilder sb = new StringBuilder();
        String line;
        
        while ((line = reader.readLine()) != null) {
          sb.append(line);
        }
          
        System.out.println("Read texts from file text:" + sb.toString());
        return sb.toString();
      } catch (IOException e) {
        System.out.println("Error: Could not read file: " + e.toString());
      }

      return null;
    }


No comments:

Post a Comment