Reading from stdin is very unlikely to cause any kind of IOException. The BufferedReader doesn't know that, though, it assumes whatever it is wrapping will throw IOException and it is just passing it along. I would think about using the java.util.Scanner
class instead, to avoid the annoyance of the BufferedReader checked exceptions here.
The JVM will handle closing stdin for you when the program terminates, so closing the reader shouldn't be an issue, except that you may end up needing to flush the BufferedReader to get all its contents. This is another reason to prefer Scanner.
For a small program it can be fine to let the main method throw exceptions, those will get written to the console (specifically, to stderr). As long as that is the behavior you want, throwing the IOException here is ok. In real life a program could be executed from a shell script and the shell script could redirect the program's output to a file, so that anything thrown by the program would be logged.