Load e Svae de ficheiros para qq pasta do computador

Oi
Eu tenho o seguinte codigo mas apenas grava os ficheiros para o directorio onde o jar s encontra alguem me pode dizer cm por a gravar em qq lado? e o load de fxeiro e igual so abre os que estao no mm sitio do jar :S

public static void save()
{
FileDialog d = new FileDialog(Aluno.jFrame, “Guardar Programa”, FileDialog.SAVE);
d.show();
d.setFilenameFilter(
new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
}
);
String filename = d.getFile();
if (filename != null) {
try {
File f = new File(filename);
FileOutputStream fs = new FileOutputStream(f);
PrintStream ps = new PrintStream( fs );
ps.close();
fs.close();
} catch (IOException ex) {
System.out.println(ex.toString());
}
}
try {
//FileWriter outStream = new FileWriter(fileName);
BufferedWriter outStream = // Cria e abre a stream
new BufferedWriter(new FileWriter(filename));
outStream.write(Aluno.EditorProgramaTextArea.getText()); // Escreve na stream
outStream.close(); // Fecha a stream
} catch (IOException e) {
Aluno.EditorProgramaTextArea.setText("IOerror: " + e.getMessage() + “\n”);
e.printStackTrace();
}

		}

}

///////////////////////////////////

public static void loadPrograma() {
	if (fProgramFileChooser == null) {
		fProgramFileChooser
		= new JFileChooser(System.getProperty("user.dir"));
	    fProgramFileChooser.setDialogTitle("Escolha um Programa para abrir");
	    ExampleFileFilter filter = new ExampleFileFilter();
	    filter.addExtension("txt");
	    filter.setDescription("Ficheiros Programa Karel");
	    fProgramFileChooser.setFileFilter(filter);
	   
	    	   
	}

	int returnVal = fProgramFileChooser.showOpenDialog(Aluno.jFrame);
	if(returnVal == JFileChooser.APPROVE_OPTION) {
	    loadPrograma(fProgramFileChooser.getSelectedFile());
	}
    }

    public static void loadPrograma(File f) {
	try {
		String fileName = fProgramFileChooser.getName(f);
		System.out.println(f);
		Aluno.EditorProgramaTextArea.setText("");
		try {
			BufferedReader inStream =			// Cria e abre a stream
					new BufferedReader(new FileReader(fileName));
			String linha = inStream.readLine(); // Le uma linha
			while (linha != null) {             // Enquanto existe mais texto
				Aluno.EditorProgramaTextArea.append(linha + "\n");		// mostra uma linha
				linha = inStream.readLine();    // Le proxima linha
			}
			inStream.close();                   // Fecha a stream
		} catch (FileNotFoundException e) {
			Aluno.EditorProgramaTextArea.setText("IOerror: Ficheiro nao encontrado: " + fileName + "\n");
			e.printStackTrace();
		} catch (IOException e) {
			Aluno.EditorProgramaTextArea.setText("IOerrorR: " + e.getMessage() + "\n");
			e.printStackTrace();
		}
	    loadPrograma(new FileInputStream(f));

	    
	} catch (FileNotFoundException e) {
	    e.printStackTrace();
	}
    }

    public static void loadPrograma(InputStream is) {
	try {
		
	    ObjectInputStream in = new ObjectInputStream(is);
	    System.out.println("lalalallalala");
	    Program prog = (Program) in.readObject();
	    in.close();
	    fRobot.setProgram(prog);
	    
	   
	    
	} catch (Exception e) {
	    e.printStackTrace();
	}
    }

Agradecia se alguem me pudesse ajudar