It isn't about the class you use, but the methods you are calling and what exceptions they throw.
Some (most) BufferedReader
methods throw IOException which is a 'checked' exception. This means you have to specify when your method throws it (ie. doesn't catch it).
From a cursory glance, it appears that the methods in Scanner
throw 'unchecked' exceptions (exceptions that derive from RuntimeException). These don't have to be specified if your method throws them (doesn't catch them).
The key is that it depends on which exceptions (checked vs unchecked) are thrown by the methods you are calling, and whether you catch those exceptions or let them bubble up to the calling code as to whether or not you need to specify them in the signature of your method.
Edit: To answer your question about compiler errors, the compiler is forcing you to either catch or explicitly declare any exceptions that are thrown by your method (or from methods you are calling).