yo tengo una clase que te regresa la ruta, donde estas trabajando, por ejemplo si corres el programa desde el ide te regresa la ruta donde se guardara, si ejecutas el jar te regresa la ruta donde esta el jar, asi si mueves el jar puedes usar esta clase para que te de la ruta donde esta el jar y al momento de guardar el fichero de texto le pones la ruta que te regresa esta clase y siempre se guardara donde tienes el .jar
import java.io.File;
import java.net.URL;
public class WorkingDirectory {
private static File WORKING_DIRECTORY;
public static File get() {
if(WORKING_DIRECTORY == null) {
try {
URL url = WorkingDirectory.class.getResource("ejemplo.txt");
System.out.println(url);
if(url.getProtocol().equals("file")) {
File f = new File(url.toURI());
f = f.getParentFile()
.getParentFile()
.getParentFile();
WORKING_DIRECTORY = f;
} else if(url.getProtocol().equals("jar")) {
String expected = "!/util/ejemplo.txt";
String s = url.toString();
s = s.substring(4);
s = s.substring(0, s.length() - expected.length());
File f = new File(new URL(s).toURI());
f = f.getParentFile();
WORKING_DIRECTORY = f;
}
} catch(Exception e) {
WORKING_DIRECTORY = new File(".");
}
}
return WORKING_DIRECTORY;
}
public String RutaJar()
{
return System.getProperty("user.dir"); // regresa la ruta
System.out.print(System.getProperty("user.dir"));//imprime la ruta
}
}
al llamar a rutajar te regresara la ruta del jar si lo ejecutas. si lo ejecutas desde el ide te regresa la ruta de la carpeta src