package hulp; /** * Provides functions to read and write text to file * where text is an ArrayList of strings */ import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.prefs.Preferences; import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; public class File2String { /** EXAMPLE PROGRAM **/ public static void main(String s[]) { // ********************* // *** WRITE TO FILE *** // ********************* ArrayList text = new ArrayList(); text.add("blabla"); text.add("8.42"); text.add("lalala;oef"); // we use the ';'-symbol to separate both items // write text to a given file File file = new File("D://test.txt"); File2String.writeToFile(text, file); // let the user choose the file // File2String.writeToFile(text, "Provide file for writing my text to"); // ********************** // *** READ FROM FILE *** // ********************** // read content from a given file File file2 = new File("D://test.txt"); ArrayList linesOfFile = File2String.readFile(file2); // let the user choose the file // ArrayList linesOfFile = File2String.readFile("Give the file you want to read"); System.out.println("Contexts of file <"+File2String.lastFile+">:"); System.out.println(linesOfFile); // ******************************** // *** PARSING CONTENTS OF FILE *** // ******************************** String line2 = linesOfFile.get(1); double x = Double.parseDouble(line2); // convert to double System.out.println("Value at line 2: "+x); String line3 = linesOfFile.get(2); int idx = line3.indexOf(";"); // we look for separator-symbol String item1 = line3.substring(0, idx); String item2 = line3.substring(idx+1); System.out.println("Item 1 of line 3: "+item1); System.out.println("Item 2 of line 3: "+item2); } public static File lastFile=null; // file of last read/write /************** METHODS TO READ FROM FILE ********************/ public static ArrayList readFile(){ return readFile("Choose file"); } public static ArrayList readFile(String text){ return readFile(chooseFile(text, (FileFilter) null)); } public static ArrayList readFile(String text, String fileSuffix){ return readFile(chooseFile(text, fileSuffix)); } public static ArrayList readFile(File file){ lastFile=file; if (file==null) return null; java.io.FileReader fr = null; try{ fr = new java.io.FileReader(file); } catch( java.io.FileNotFoundException e){ return null; } BufferedReader in = new BufferedReader(fr); try{ saveFileLocation(file.getParent()); }catch(Exception e){} return readAllLines(in); } private static ArrayList readAllLines(BufferedReader in) { ArrayList v = new ArrayList(); String line=null; int ctr=0; try { while ((line = in.readLine()) != null) { line.trim(); v.add(line); ctr++; } } catch (IOException e) { System.err.println("Error when reading line "+ctr+":"+line); e.printStackTrace(); } return v; } /************** METHODS TO WRITE TO FILE ********************/ public static void writeToFile(ArrayList lines){ writeToFile(lines, "Choose file"); } public static void writeToFile(ArrayList lines, String text){ writeToFile(lines, chooseFile(text, (FileFilter) null)); } public static void writeToFile(ArrayList lines, String text, String fileSuffix){ writeToFile(lines, chooseFile(text, fileSuffix)); } public static void writeToFile(ArrayList lines, File file){ lastFile=file; PrintWriter out; try { out = new PrintWriter(new FileOutputStream(file)); } catch (IOException e) { throw new IllegalArgumentException("Output file could not be opened: "+ file); } for(String line: lines){ out.println(line); } out.close(); } /************** METHODS TO OPEN FILES ********************/ public static File chooseFile(String text){ return chooseFile(text, (FileFilter)null); } public static File chooseFile(String text, String fileSuffix){ return chooseFile(text, getFileFilter(new String[]{fileSuffix})); } public static File chooseFile(String text, String[] fileSuffices){ return chooseFile(text, getFileFilter(fileSuffices)); } public static File chooseFile(String text, FileFilter fileFilter){ JFileChooser chooser = new JFileChooser(); String sessionSaveLocation = getFileLocation(); chooser.setCurrentDirectory(new File(sessionSaveLocation)); if (fileFilter == null) chooser.resetChoosableFileFilters(); else chooser.addChoosableFileFilter(fileFilter); chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); chooser.showDialog(null, text); File file = chooser.getSelectedFile(); if (file != null) saveFileLocation(file.getParent()); return file; } /*********** METHODS TO REMEMBER LAST VISITED FILE LOCATION ********************/ private static Preferences prefsData = Preferences.userRoot(); private static String FILE_LOCATION = ""; // if preferences do not work public static String getFileLocation(){ String loc = prefsData.get("fileLocation", ""); if (loc.equals("")) return FILE_LOCATION; else return loc; } public static void saveFileLocation(String fileLocation){ prefsData.put("fileLocation", fileLocation); String loc = prefsData.get("fileLocation", ""); if (loc.equals("")) // if put did not succeed FILE_LOCATION = fileLocation; } /************** METHODS TO CREATE FILE FILTERS ********************/ // returns a file filter for a JFileChooser public static FileFilter getFileFilter(String[] s) { return getFileFilter(s,""); } public static FileFilter getFileFilter(String[] s, String d) { class CustomFileFilter extends FileFilter { private String[] ext; private String description; public CustomFileFilter(String[] ext, String desc) { this.ext = ext; description = desc; } public String getDescription() { return description; } public boolean accept(File f) { if (f.isDirectory()) { return true; } String extension = getExtension(f); boolean b = false; if (extension != null) { for (int i=0; i 0 && i < s.length() - 1) { ext = s.substring(i+1).toLowerCase(); } return ext; } /************************************************************************/ }