public List<String[]> readDataFile(File dataFile) throws JChunkerException {
        List<String[]> dataList = new ArrayList<String[]>();
        
        BufferedReader dataFileReader = null;
        try {
            dataFileReader = new BufferedReader(new InputStreamReader(new FileInputStream(dataFile), dataFileEncoding));
            
            String line;
            while ((line = dataFileReader.readLine()) != null) {
                // Split this line by whitespace to get its columns.
                String dataLine[] = line.split(REGEX_WHITESPACE);
                
                if (dataLine.length == 1) {
                    // If the line was blank add a zero length array to the result list.
                    dataList.add(new String[]{});
                }
                else {
                    dataList.add(dataLine);
                }
            }
        } catch (FileNotFoundException e) {
            throw new JChunkerException("The data file was not found.", e);
        } catch (UnsupportedEncodingException e) {
            throw new JChunkerException("The data file is not in the correct encoding.", e);
        } catch (IOException e) {
            throw new JChunkerException("An error occurred while reading the data file.", e);
        }
        finally {
            if (dataFileReader != null) {
                try {
                    dataFileReader.close();
                } catch (IOException e) {
                    throw new JChunkerException("An error occurred while closing the data file.", e);
                }
            }
        }
        
        return dataList;
    }