Libgdx Game Save Jar/Android

I got an annyoing problem that I cant solve regarding saving/reading files in Libgdx. I have a “GameData” class which I can save by using the JSON parser. Everything is working fine on the desktop but when I package it and run it from a jar everything stops working. I worked by using this mannual: https://github.com/libgdx/libgdx/wiki/File-handling.
Currently I am using local files which should be readable and writable instead of internal files (which I use just for stuff which are readable only like gameStrings) and would like to know what I am doing wrong and how I can change my code so it would run on android as well.

Thanks in advance for your help:

public class SaveHandle {

	private GameData gameData;
	private GameStrings gameStrings;
	private String gameSavePath = "gameSave.json";
	private String stringSaveEn = "save/strings_en.json";
	private String stringSaveDe = "save/strings_de.json";
	private FileHandle file;
	private Json json;

	public SaveHandle() {
		json = new Json();
	}

	public void init() {

	}

	public void save(GameData gameData) {
		file = Gdx.files.local(gameSavePath);
		file.writeString(json.prettyPrint(gameData), false);
	}

	public GameData load() {

		file = Gdx.files.local(gameSavePath);
		try {
			if (json.fromJson(GameData.class, file) != null) {
				gameData = json.fromJson(GameData.class, file);
			}
		} catch (Exception e) {
			System.out.println("exception");
			init();
		}

		if (gameData == null) {
			gameData = new GameData();
			gameData.init();
		}

		return gameData;

	}

	public GameStrings loadStrings() {
		if (gameData.getLanguage().equals(Language.English)) {
			file = Gdx.files.internal(stringSaveEn);
		} else {
			file = Gdx.files.internal(stringSaveDe);
		}
		gameStrings = json.fromJson(GameStrings.class, file);
		return gameStrings;
	}

	public void reset() {
		GameData newData = new GameData();
		newData.init();
		save(newData);
	}

}

Hello I done saving ages ago but I saved stuff in a String maybe this can help you

public static void loadData() {
		if (Gdx.files.isLocalStorageAvailable()) {
			
			//---------------------------------------
			//eNumber
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/eNum/eNumber.hawk");
			if (!Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("0", false);
			}
			ShopScreen.eNumberString = Assets.fileHandler.readString();
			ShopScreen.eNumber = Integer
					.parseInt(ShopScreen.eNumberString);
			//---------------------------------------

			//Blue Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b1Blue.hawk");
			if (!Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("0", false);
			}
			Prices.string_paid_ball_blue = Assets.fileHandler.readString();
			Prices.paid_ball_blue = Integer
					.parseInt(Prices.string_paid_ball_blue);
			//Red Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b2Red.hawk");
			if (!Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("0", false);
			}
			Prices.string_paid_ball_red = Assets.fileHandler.readString();
			Prices.paid_ball_red = Integer
					.parseInt(Prices.string_paid_ball_red);
			//Golden Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b3Golden.hawk");
			if (!Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("0", false);
			}
			Prices.string_paid_ball_golden = Assets.fileHandler.readString();
			Prices.paid_ball_golden = Integer
					.parseInt(Prices.string_paid_ball_golden);
			//RainBow Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b4Rainbow.hawk");
			if (!Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("0", false);
			}
			Prices.string_paid_ball_rainBow = Assets.fileHandler.readString();
			Prices.paid_ball_rainBow = Integer
					.parseInt(Prices.string_paid_ball_rainBow);
			//Basket Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b5Basket.hawk");
			if (!Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("0", false);
			}
			Prices.string_paid_basket_ball_1 = Assets.fileHandler.readString();
			Prices.paid_basket_ball_1 = Integer
					.parseInt(Prices.string_paid_basket_ball_1);
		}

	}

	public static void saveData() {
		if (Gdx.files.isLocalStorageAvailable()) {
			//---------------------------------------
			//eNumber
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/eNum/eNumber.hawk");
			if (Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("" + ShopScreen.eNumber, false);
			}
			//---------------------------------------
			// Blue Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b1Blue.hawk");
			if (Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("" + paid_ball_blue, false);
			}
			// Red Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b2Red.hawk");
			if (Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("" + paid_ball_red, false);
			}
			// Golden Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b3Golden.hawk");
			if (Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("" + paid_ball_golden, false);
			}
			// RainBow Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b4Rainbow.hawk");
			if (Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("" + paid_ball_rainBow, false);
			}
			// Basket Ball
			Assets.fileHandler = Gdx.files
					.local("ExtremeKickUps/data/balls/b5Basket.hawk");
			if (Assets.fileHandler.exists()) {
				Assets.fileHandler.writeString("" + paid_basket_ball_1, false);
			}
		}
	}

JUst scroll through it and you can see how it is done. You can use bytes but im not sure how i would use bytes other then saving colors also as you can see i saved the Strings in different files thats not a great idea but doesn’t seem to do anything performace wise to the game what is good this also works for android

On desktop local files should be in the root directory, so the location from which you execute the jar is very important.

But if I create a new saveFile if the directory is empty everything should be fine.
Is there a problem now how I save my files? If I deploy my game to android everything crashes at first and I can’t figure out why. First I thought it was my saving method but now I am not sure anymore.