package org.myrobotlab.control.widget; import java.awt.FileDialog; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.JFrame; import org.myrobotlab.logging.LoggerFactory; import org.slf4j.Logger; public class FileUtil { public final static Logger log = LoggerFactory.getLogger(FileUtil.class.getCanonicalName()); static private String lastFileOpened; static private String lastFileSaved; static private String lastStatus; public static String getLastFileOpened() { return lastFileOpened; } public static String getLastFileSaved() { return lastFileSaved; } public static String getLastStatus() { return lastStatus; } static public String open(JFrame frame, String filter) { FileDialog file = new FileDialog(frame, "Open File", FileDialog.LOAD); file.setFile(filter); // Set initial filename filter file.setVisible(true); // Blocks String curFile; if ((curFile = file.getFile()) != null) { String newfilename = file.getDirectory() + curFile; char[] data; // setCursor (Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); File f = new File(newfilename); try { FileReader fin = new FileReader(f); int filesize = (int) f.length(); data = new char[filesize]; fin.read(data, 0, filesize); log.info("Loaded: " + newfilename); setLastFileOpened(newfilename); // avoid leaky file handles. fin.close(); return new String(data); } catch (FileNotFoundException exc) { lastStatus = "File Not Found: " + newfilename; log.error(lastStatus); } catch (IOException exc) { lastStatus = "IOException: " + newfilename; log.error(lastStatus); } // setCursor (Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } return null; } static public boolean save(JFrame frame, String data, String filename) { if (filename == null || !(new File(filename).exists())) { return saveAs(frame, data, filename); } else { return writeFile(data, filename); } } static public boolean saveAs(JFrame frame, String data, String filename) { FileDialog fd = new FileDialog(frame, "Save File", FileDialog.SAVE); fd.setFile(filename); fd.setVisible(true); String selectedFilename = fd.getFile(); if (selectedFilename != null) { filename = fd.getDirectory() + selectedFilename; // new selected // file } else { setLastStatus("canceled file save"); return false; } return writeFile(data, filename); } public static void setLastFileOpened(String lastFileOpened) { FileUtil.lastFileOpened = lastFileOpened; } public static void setLastFileSaved(String lastFileSaved) { FileUtil.lastFileSaved = lastFileSaved; } public static void setLastStatus(String lastStatus) { FileUtil.lastStatus = lastStatus; } static public boolean writeFile(String data, String filename) { File f = new File(filename); try { FileWriter fw = new FileWriter(f); fw.write(data, 0, data.length()); fw.close(); setLastStatus("saved: " + filename); lastFileSaved = filename; } catch (IOException exc) { setLastStatus("IOException: " + filename); return false; } return true; } }