Yes, you can do this in one line (though for robust¬†IOException¬†handling you wouldn't want to).
String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
This uses a¬†java.util.Scanner, telling it to delimit the input with¬†\Z, which is the end of the string anchor. This ultimately makes the input have one actual token, which is the entire file, so it can be read with one call to¬†next().
There is¬†a constructor¬†that takes a¬†File¬†and a¬†String charSetName¬†(among many other overloads). These two constructor may throw¬†FileNotFoundException, but like all¬†Scanner¬†methods, no¬†IOException¬†can be thrown beyond these constructors.
You can query the¬†Scanner¬†itself through the¬†ioException()¬†method if an¬†IOException¬†occurred or not. You may also want to explicitly¬†close()¬†the¬†Scanner¬†after you read the content, so perhaps storing the¬†Scanner¬†reference in a local variable is best.
Third-party library options
For completeness, these are some really good options if you have these very reputable and highly useful third party libraries:
com.google.common.io.Files¬†contains many useful methods. The pertinent ones here are:
org.apache.commons.io.IOUtils¬†also offer similar functionality:
- String toString(InputStream, String encoding)
- Using the specified character encoding, gets the contents of an¬†InputStream¬†as a¬†String
- List readLines(InputStream, String encoding)
- ... as a (raw)¬†List¬†of¬†String, one entry per line