import java.io.*; public class PlaygroundIO { private static final String FILE_HEADER="Game_of_Life.Playground"; private static final String WIDTH_TOKEN="width "; private static final String HEIGHT_TOKEN="height "; private static final String DATA_BEGIN_TOKEN="Begin"; private static final String DATA_END_TOKEN="End"; private static boolean isSquare( int[][] pg){ if (pg.length == 0) return true; int width=pg[0].length; for (int r=1; r < pg.length; r++) { if (pg[r].length != width) return false; } return true; } public static void saveToFile( int[][] pg, File dest) throws IOException { FileWriter playgroundWriter=null; if (dest == null) { throw new IllegalArgumentException("dest was null"); } else if (pg == null) { throw new IllegalArgumentException("pg was null"); } if (!isSquare(pg)) { throw new IllegalArgumentException("tried to save a non-square playground"); } if (dest.exists()) { dest.delete(); } if (!dest.createNewFile()) { throw new IOException("File Could Not Be Created" + dest.getName()); } if (!dest.canWrite()) { throw new IOException("cannot write to" + dest.getName()); } try { int height=pg.length; int width=pg[0].length; playgroundWriter=new FileWriter(dest); playgroundWriter.write(FILE_HEADER + "\n"); playgroundWriter.write(HEIGHT_TOKEN + height + "\n"); playgroundWriter.write(WIDTH_TOKEN + width + "\n"); playgroundWriter.write(DATA_BEGIN_TOKEN + "\n"); for (int r=0; r < height; r++) { for (int i=0; i < width; i++) { playgroundWriter.write(String.valueOf(pg[r][i])); } playgroundWriter.write("\n"); } playgroundWriter.write(DATA_END_TOKEN); } catch ( final IOException e) { throw new IOException("Unexpected Write Exception Occured"); } finally { if (playgroundWriter != null) { playgroundWriter.close(); } } } public static int[][] loadFromFile( File source) throws IOException { if (!source.exists()) { throw new IOException("Given File Doesnt Exist" + source.getName()); } else if (!source.canRead()) { throw new IOException("Given File Is Not Readable" + source.getName()); } BufferedReader reader=new BufferedReader(new FileReader(source)); if (!reader.ready()) { throw new IOException("Given File Is Empty" + source.getName()); } int[][] playground; String line; if (!reader.readLine().equals(FILE_HEADER)) { throw new IOException("Illegal format"); } try { int width; int height; line=reader.readLine(); if (!line.startsWith(HEIGHT_TOKEN)) { throw new IOException("Illegal format"); } else { height=Integer.parseInt(line.substring(HEIGHT_TOKEN.length())); } line=reader.readLine(); if (!line.startsWith(WIDTH_TOKEN)) { throw new IOException("Illegal format"); } else { width=Integer.parseInt(line.substring(WIDTH_TOKEN.length())); } if (!reader.readLine().equals(DATA_BEGIN_TOKEN)) { throw new IOException("Illegal format"); } playground=new int[width][height]; for (int r=0; r < height; r++) { line=reader.readLine(); for (int i=0; i < width; i++) { playground[r][i]=Integer.parseInt(line.substring(i,i + 1)); } } if (!reader.readLine().equals(DATA_END_TOKEN)) { throw new IOException("Illegal format"); } } catch ( NumberFormatException e) { throw new IOException("Illegal format"); } return playground; } }