Exporting and sharing
IA tooling, not an exam topic. These are JavaFX and standard-library patterns to adapt for your IA. Nothing here is examinable, and your IA must be your own work.
This page is about getting data out of your app: writing a CSV that a spreadsheet can open, opening the user’s mail client pre-filled, and opening a web page.
Export your data to a CSV file
What this does: writes your records as comma-separated rows to a file that spreadsheets open directly.
When you would use it in your IA: giving the client a report they can open in a spreadsheet, or exporting a table so the data can be used elsewhere. CSV needs no extra library, which is why it is preferred over true spreadsheet files.
The pattern:
Imports:
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.List;
Method:
private void exportCsv(File file, List<Item> items) {
try (PrintWriter out = new PrintWriter(file)) {
out.println("Name,Quantity"); // header row
for (Item item : items) {
out.println(item.getName() + "," + item.getQuantity());
}
} catch (IOException e) {
// tell the user the export failed
}
}
Make it your own:
- Change the header line and the row line to match your own columns and getters.
- Pair this with a save dialog so the user chooses where the file goes: get the
Filefrom Let the user choose a file with a"*.csv"filter.
Watch out for:
- The one real gotcha with CSV is a value that itself contains a comma, for example a name like
"Smith, John". It would split into two columns and shift the row. The simplest fixes are to wrap such values in double quotes ("Smith, John"), or to choose a delimiter the data will never contain, such as a semicolon or a tab. - A stray line break inside a value causes the same kind of problem. Keep exported values to single lines.
Mix with: Let the user choose a file, Display rows in a scrollable table.
Email from a button
What this does: opens the user’s own mail program with a new message already filled in, ready for them to review and send.
When you would use it in your IA: a “Contact support” or “Email this booking” button, where the user sends the message from their own account rather than your app sending it for them.
The pattern:
Imports:
import java.awt.Desktop;
import java.net.URI;
Method:
private void emailSupport() {
if (!Desktop.isDesktopSupported()) {
return; // not available on this system
}
try {
String to = "support@example.com";
String subject = "Question about my booking";
String body = "Hello,";
URI mailto = new URI("mailto:" + to
+ "?subject=" + subject.replace(" ", "%20")
+ "&body=" + body.replace(" ", "%20"));
Desktop.getDesktop().mail(mailto);
} catch (Exception e) {
// handle the error
}
}
Make it your own:
- Change the
to,subject, andbodystrings. - Spaces and other special characters need to be encoded in a URL, which is why the example replaces spaces with
%20. For longer bodies,java.net.URLEncoder.encode(text, "UTF-8")does this more thoroughly.
Watch out for:
- This opens the user’s mail client pre-filled and needs no password or server. That is the point: it is the safe approach for a school IA.
- Do not try to send mail directly from your app with hardcoded login details (the JavaMail or SMTP approach). That needs a mail server and stored credentials in your code, which is poor practice and a security risk. The mail-client approach above avoids both.
Desktoplives injava.awt, but here it is only used to hand the request to the operating system, not to build any Swing window. The interface stays pure JavaFX.
Mix with: Open a web page from your app, Tell the user something.
Open a web page from your app
What this does: opens a web address in the user’s default browser.
When you would use it in your IA: a Help link to online documentation, an About link to a project page, or a link to a resource the app refers to.
The pattern:
Imports:
import java.awt.Desktop;
import java.net.URI;
Method:
private void openHelpPage() {
if (!Desktop.isDesktopSupported()) {
return;
}
try {
Desktop.getDesktop().browse(new URI("https://example.com/help"));
} catch (Exception e) {
// handle the error
}
}
Make it your own:
- Change the address inside
new URI(...)to the page you want to open. - The same
Desktop.isDesktopSupported()guard applies as for email.
Watch out for:
- The address must be a full URL including
https://, ornew URI(...)may not open it as a web page. - On some systems (for example a headless server, or a locked-down lab machine)
Desktopis not supported, which is exactly what the guard check protects against.
Mix with: Email from a button, Add actions to the menu bar.