File Parser for levels #18
@ -5,6 +5,7 @@ import school_project.Piece;
|
||||
import school_project.Utils.Bitwise;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class BinaryParser implements FileParser {
|
||||
@ -13,8 +14,26 @@ public class BinaryParser implements FileParser {
|
||||
* Check if the file is a binary file suited for parsing
|
||||
* @return true if it is a binary File
|
||||
*/
|
||||
static boolean isBinaryFile(File file){
|
||||
// TODO: 3/18/23
|
||||
static boolean isBinaryFile(File file) throws IOException {
|
||||
// TODO: 3/20/23 Need more testing
|
||||
if (Files.probeContentType(file.toPath()) != null)
|
||||
return false;
|
||||
|
||||
FileInputStream r_file = new FileInputStream(file);
|
||||
byte[] content = r_file.readAllBytes();
|
||||
|
||||
boolean header_found = false;
|
||||
for (int i = 0; i < content.length; i++) {
|
||||
if (!header_found) {
|
||||
if (content[i] == 'S' && content[i + 1] == 'M' && content[i + 2] == 'S') {
|
||||
header_found = true;
|
||||
}
|
||||
} else {
|
||||
if (content[i] == 'S' && content[i + 1] == 'M' && content[i + 2] == 'E') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -33,6 +52,34 @@ public class BinaryParser implements FileParser {
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract Level data from file content
|
||||
* @param fileStream file stream to read extract data from
|
||||
* @return Level data as an array of byte
|
||||
* @throws IOException Expected if we can't read the file
|
||||
*/
|
||||
private static byte[] ExtractLevelData(FileInputStream fileStream) throws IOException {
|
||||
|
||||
byte[] bytes = fileStream.readAllBytes();
|
||||
|
||||
int start_position = 0, end_position = 0;
|
||||
for (int i = 0; i < bytes.length; i++) {
|
||||
if(bytes[i] == 83 && bytes[i+1] == 77 && bytes[i+2] == 83){ // SMS
|
||||
start_position = i+3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = start_position; i < bytes.length; i++) {
|
||||
if(bytes[i] == 83 && bytes[i+1] == 77 && bytes[i+2] == 69){ // SME
|
||||
end_position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return Arrays.copyOfRange(bytes, start_position, end_position);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Pieces out of the level data
|
||||
* @param levelData full data of the level without header and footer
|
||||
@ -64,34 +111,6 @@ public class BinaryParser implements FileParser {
|
||||
return BuildMatrixFromBytes(map_width, map_height, map_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract Level data from file content
|
||||
* @param fileStream file stream to read extract data from
|
||||
* @return Level data as an array of byte
|
||||
* @throws IOException Expected if we can't read the file
|
||||
*/
|
||||
private static byte[] ExtractLevelData(FileInputStream fileStream) throws IOException {
|
||||
|
||||
byte[] bytes = fileStream.readAllBytes();
|
||||
|
||||
int start_position = 0, end_position = 0;
|
||||
for (int i = 0; i < bytes.length; i++) {
|
||||
if(bytes[i] == 83 && bytes[i+1] == 77 && bytes[i+2] == 83){ // SMS
|
||||
start_position = i+3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = start_position; i < bytes.length; i++) {
|
||||
if(bytes[i] == 83 && bytes[i+1] == 77 && bytes[i+2] == 69){ // SME
|
||||
end_position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return Arrays.copyOfRange(bytes, start_position, end_position);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a boolean Matrix From a byte array
|
||||
* Each Byte is composed of 8 bit, each bit is 1 or 0
|
||||
|
@ -1,6 +1,7 @@
|
||||
package school_project.Parsers;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.NotSerializableException;
|
||||
|
||||
/**
|
||||
@ -14,7 +15,7 @@ import java.io.NotSerializableException;
|
||||
* @author tonitch
|
||||
*/
|
||||
public class FileParserFactory {
|
||||
public static FileParser createParser(File file) throws NotSerializableException{
|
||||
public static FileParser createParser(File file) throws IOException {
|
||||
if(BinaryParser.isBinaryFile(file))
|
||||
return new BinaryParser();
|
||||
else if (TxtParser.isTextFile(file))
|
||||
|
@ -3,14 +3,16 @@ package school_project.Parsers;
|
||||
import school_project.Map;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
|
||||
public class TxtParser implements FileParser{
|
||||
/**
|
||||
* Check if the file is a text file
|
||||
* @return true if it is a text File
|
||||
*/
|
||||
static boolean isTextFile(File file){
|
||||
return false;
|
||||
static boolean isTextFile(File file) throws IOException {
|
||||
return Files.probeContentType(file.toPath()).equals("text/plain");
|
||||
// TODO: 3/18/23
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user