I dont get it, Data Not persisting between game loads

Im trying to set up a save for the users data. I set it up so that if there is no save file(Which means its the first load), it will credit the player with some items. But it does not seem to save, as it comes up as 0 the next time it runs. Anyone see what im doing wrong?

The persistent script:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

public class PersistentData : MonoBehaviour {

    public static PersistentData dataObject;

    //Persistent Data here
    public int amps = 0;
    //Capacitors
    public int cap1v;
    public int cap3v;
    public int cap5v;
    public int cap9v;
    public int cap12v;
    public int cap24v;
    //Statistics
    public int totalDistance;
    public int lifetimeAmps;
    public int totalCapsUsed;
    public float lifetimeTimeInSeconds;
    public int numberOfRuns;
    public int distanceRecordNoCaps;
    public int distanceRecordWithCaps;
    public float highestAvgVoltage;
    public float longestRunInSeconds;
    public float highestAmpsEarned;

    //check if this object already exists and make sure its not destroyed every level
    private void Awake()
    {
        if (dataObject == null)
        {
            DontDestroyOnLoad(gameObject);
            dataObject = this;
        }
        else if (dataObject != this)
        {
            Destroy(gameObject);
        }
    }

    public void Save()
    {
        //setup for saving
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.dat");

        //Add the data here too
        PlayerData data = new PlayerData();
        data.amps = amps;

        data.cap1v = cap1v;
        data.cap3v = cap3v;
        data.cap5v = cap5v;
        data.cap9v = cap9v;
        data.cap12v = cap12v;
        data.cap24v = cap24v;
        //Statistics
        data.totalDistance = totalDistance;
        data.lifetimeAmps = lifetimeAmps;
        data.totalCapsUsed = totalCapsUsed;
        data.lifetimeTimeInSeconds = lifetimeTimeInSeconds;
        data.numberOfRuns = numberOfRuns;
        data.distanceRecordNoCaps = distanceRecordNoCaps;
        data.distanceRecordWithCaps = distanceRecordWithCaps;
        data.highestAvgVoltage = highestAvgVoltage;
        data.longestRunInSeconds = longestRunInSeconds;
        data.highestAmpsEarned = highestAmpsEarned;

    //actually writing the data
    bf.Serialize(file, data);
        file.Close();
    }

    public void Load()
    {
        if (File.Exists(Application.persistentDataPath + "/playerInfo.dat"))
        {
            print("Save File Found");
            //setup for loading
            BinaryFormatter bf = new BinaryFormatter();
            FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.dat", FileMode.Open);
            PlayerData data = (PlayerData)bf.Deserialize(file);

            //Data Here Too
            amps = data.amps;

            data.cap1v = cap1v;
            data.cap3v = cap3v;
            data.cap5v = cap5v;
            data.cap9v = cap9v;
            data.cap12v = cap12v;
            data.cap24v = cap24v;
            //Statistics
            data.totalDistance = totalDistance;
            data.lifetimeAmps = lifetimeAmps;
            data.totalCapsUsed = totalCapsUsed;
            data.lifetimeTimeInSeconds = lifetimeTimeInSeconds;
            data.numberOfRuns = numberOfRuns;
            data.distanceRecordNoCaps = distanceRecordNoCaps;
            data.distanceRecordWithCaps = distanceRecordWithCaps;
            data.highestAvgVoltage = highestAvgVoltage;
            data.longestRunInSeconds = longestRunInSeconds;
            data.highestAmpsEarned = highestAmpsEarned;

            file.Close();
        }
        else if(!File.Exists(Application.persistentDataPath + "/playerInfo.dat")) //If no save file, default the settings
        {
            print("No Save File Found");
            dataObject.cap1v = 3;
            Save();
        }
    }

    private void Update()
    {
        print(dataObject.cap1v);
    }

}

[Serializable]
class PlayerData {

    //Persistent Data goes here
    public int amps = 0;
    //Capacitors
    public int cap1v = 0;
    public int cap3v = 0;
    public int cap5v = 0;
    public int cap9v = 0;
    public int cap12v = 0;
    public int cap24v = 0;
    //Statistics
    public int totalDistance;
    public int lifetimeAmps;
    public int totalCapsUsed;
    public float lifetimeTimeInSeconds;
    public int numberOfRuns;
    public int distanceRecordNoCaps;
    public int distanceRecordWithCaps;
    public float highestAvgVoltage;
    public float longestRunInSeconds;
    public float highestAmpsEarned;
}

And the script im trying to access it with:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MainMenuUI : MonoBehaviour {

    public Text capText;
    public Text ampText;

    private int capCount;
    private int ampCount;

    private void Awake()
    {

    }

    // Use this for initialization
    void Start () {
        PersistentData.dataObject.Load(); //Load data

        ampCount = PersistentData.dataObject.amps; //Load Correct Amp Count
        LoadCapCount(); //Load the total Cap count

        ampText.text = ((int)ampCount).ToString(); //Set amp count on UI
        capText.text = ((int)capCount).ToString(); //Set amp count on UI
    }
   
    // Update is called once per frame
    void Update () {
    }

    void LoadCapCount()
    {
        capCount =
        PersistentData.dataObject.cap1v +
        PersistentData.dataObject.cap3v +
        PersistentData.dataObject.cap5v +
        PersistentData.dataObject.cap9v +
        PersistentData.dataObject.cap12v +
        PersistentData.dataObject.cap24v;
    }

}

At first glance everything should be working. Make sure you’re actually calling .Save() method at all.

Also, don’t forget to wrap your serialization code in try / catch block, so that in case of failure it won’t lock the file.
Keyword is finally

Also, use Path.Combine instead of + operator to avoid / \ issues in different operation system envionments.

Turns out i just screwed up my load function. I did the exact same thing as on save, when it should be the opposite