Qué mente puede concebir estos horrores? A mí suelen tomarme el pelo por ser un fan de Perl, porque el lenguaje puede ser ilegible... Pero vean lo que se puede hacer con un lenguaje fuertemente tipado, pensado para que uno cometa menos errores:

public static void main(String[] args) {
 try {
    [...]
 }catch (Throwable a) {
   ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
   PrintStream stream2 = new PrintStream(stream1);
   System.out.println("Error...verifique los permisos de los archivos ");
   a.printStackTrace(stream2);
   String stackTrace = stream1.toString();
   System.out.println(stackTrace);
   return;
  }
 }

Veamos:

  1. Todo el jodido main metido dentro de un solo catch, no vaya a ser cosa que se puedan diferenciar los problemas.
  2. El catch jamás se debe hacer sobre una excepción en particular!! Para qué, si es más fácil capturar todos los posibles errores?
  3. Por supuesto, que cuando hay un error, siempre es de permisos.
  4. Además, si ya capturamos la excepción, salimos con return, así al shell le queda claro que terminó sin errores.
  5. Por no decir que 5 líneas de basura sin sentido es mucho más fácil que hacer a.printStackTrace(), que además imprime en stderr. Es una locura pensar en hacer las cosas bien!

Una vez más, queda probado que cualquiera se pone a programar...