Una humilde experiencia: cuando usaba un fichero o una tabla de alguna base de datos (ambos son archivos "externos", o sea no son de Java, tú me entiendes) procedía mas o menos así:
(Trabajo con NetBeans)
Antes de hacer la llamada desde mi código Java al archivo necesario, lo ponía en la carpeta de mi aplicación. Por ejemplo si debía usar file.blabla, lo movía a la misma carpeta de mi aplicación:
NetBeansProjects\JavaApplication1\file.blabla
de tal manera que en mi código sólo hacia la llamada sin proporcionarle ruta alguna:
Ahora bien, al crear el .jar, éste se crea en una carpeta dist, quedando así:
NetBeansProjects\JavaApplication1\dist\JavaApplica tion1.jar
Entonces, copiaba el archivo necesario file.blabla dentro de esa carpeta, quedando así:
NetBeansProjects\JavaApplication1\dist\file.blabla
De esa manera, nunca tuve ningún problema con las rutas ni las "jaladas".