I know I have to use file I/O but I don't like how to use it. Anyone can teach me how to implement file I/O to capture the information on the world into a txt file?


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public static List readText(String reqfile) // throws IOException { FileInputStream fis = null ; BufferedReader r = null ; List lines = new ArrayList(); try { if (reqfile != null ) { fis = new FileInputStream(reqfile); r = new BufferedReader( new InputStreamReader(fis)); String linetmp; while ((linetmp = r.readLine()) != null ) { lines.add(linetmp); } } } catch (IOException e) { System.err.println( "Caught IOException: " + e.getMessage()); } return lines; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public void load() throws Exception { //<----here I want to load the save in "game.txt" } public void save() throws Exception { FileWriter writer = null ; writer = new FileWriter( "game.txt" ); writer.write(???); //<---here I want to save the what world is like at this moment writer.close(); } |
1 2 | fis = new FileInputStream( "game.txt" ); r = new BufferedReader( new InputStreamReader(fis)); |
1 2 3 4 5 6 7 | List lines = new ArrayList(); //This is where we will store the Strings String linetmp; while ((linetmp = r.readLine()) != null ) //This reads the next line, saves it as linetmp, then continues as long as it isn't null { lines.add(linetmp); //This adds the String to our List } |
1 | writer = new FileWriter( "game.txt" , false ); //This makes it overwrite the old file |
1 2 3 4 5 6 7 8 9 10 11 | List linesToWrite = //your lines for ( int i = 0 ; i < linesToWrite.length; i++) { if (linesToWrite[i] != null ) { writer.write(linesToWrite[i]); writer.newLine(); } } writer.close(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public void load() throws Exception { File inputFile = new File( "a.txt" ); Scanner input = new Scanner( "a.txt" ); int [][] num; // <--Could I do this to store a nx4 array where [0][0] is like the text file shown eg. 0 String [][] state; //<-- Could I do this to store a nx2 array which only contain true and false boolean exists = inputFile.exists(); if ( exists ){ while (input.hasNext()){ startPerson = ???; //<--How can I get the first number in the text for ( int row= 0 ;row<the number of line in the text ; row++){ //how to set the number of line in the text for ( int col= 0 ;col< 2 ;col++){ String state[row][col] = input.next(); //<--I want this to store true false in that nx2 array } } for ( int row= 0 ;row<the number of line in the text ; row++){ //how to set the number of line in the text for ( int col= 0 ;col< 2 ;col++){ num[row][col] = input.nextInt(); // I want to store the numbers into a array starting to read from the second line } } for ( int i= 0 ;i<number of line in the text;i++) { //this loop need to be correct but dun know how Object c = new Object(num[i][ 0 ], num[i][ 1 ], state[i][ 0 ]); state[i][ 1 ] = c.selected; addObject(c, num[i][ 2 ], num[i][ 3 ]); } } input.close(); } else return ; |
1 2 3 4 5 6 7 8 | .... writer.println(startPerson); for ( int i= 0 ;i<numOfObjects;i++){ Object object = objectss.get(i); writer.print(object.color() + " " + object.which() + " " + object.ex() + " " + object.getX() + " " + object.getY() + " " + object.selected); writer.println(); } writer.close(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // to create the string to save String text = "" ; text += ( char ) startPerson; for ( int i = 0 ; i < lineCount; i++) { int value = 1 ; // to set second highest bit value = (value * 2 ) + (state[i][ 1 ] ? 1 : 0 ); value = (value * 8 ) + num[i][ 3 ]; value = (value * 8 ) + num[i][ 2 ]; value = (value * 2 ) + (state[i][ 0 ] ? 1 : 0 ); value = (value * 8 ) + num[i][ 1 ]; value = (value * 8 ) + num[i][ 0 ]; text += ( char ) value; } // to break the string back up after reading it back in as 'text' lineCount = text.length() - 1 ; if (lineCount != - 1 )) { startPerson = ( int ) text.charAt( 0 ); text = text.substring( 1 ); for ( int i = 0 ; i < lineCount; i++) { int value = ( int ) text.charAt(i); num[i][ 0 ] = value % 8 ; value = value / 8 ; num[i][ 1 ] = value % 8 ; value = value / 8 ; state[i][ 0 ] = value % 2 == 1 ; value = value / 2 ; num[i][ 2 ] = value % 8 ; value = value / 8 ; num[i][ 3 ] = value % 8 ; value = value / 8 ; state[i][ 1 ] = value % 2 == 1 ; } } |
1 2 3 | public static int [][] num; public static int startPerson = - 1 ; public static int lineCount = 0 ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | ..... String text = "" ; int line= 0 ; text += ( char ) startPerson; while (input.hasNextLine()== true ) { line++; } for ( int i = 0 ; i < line; i++) { int value = 1 ; // to set second highest bit value = (value * 2 ) + num[i][ 0 ]; value = (value * 7 ) + num[i][ 1 ]; value = (value * 8 ) + num[i][ 2 ]; value = (value * 4 ) + num[i][ 3 ]; value = (value * 2 ) + num[i][ 4 ]; value = (value * 2 ) + num[i][ 5 ]; text += ( char ) value; } boolean flipState; lineCount = text.length()- 2 ; if (lineCount != - 1 ) { startPerson = ( int ) text.charAt( 0 ); text = text.substring( 2 ); for ( int i= 0 ;i<lineCount;i++){ int value = ( int ) text.charAt(i); num[i][ 0 ] = value % 2 ; value = value / 2 ; |
1 2 3 4 5 6 | int objNum = 0 ; for (Obj obj : getObjects(Object1. class )) { Object1 o1 = (Object1) obj; text += encode(o1.color(), o1.which(), o1.ex, o1.getX(), o1.getY(), o1.selected); } |