public Parser(List<File> inputFiles, File outputFile, char[] wordCharacters, Locale locale, char[] additionalInnerWordCharacters, int maxListSize) throws IOException {
        if (inputFiles.size() == 0)
            throw new IllegalArgumentException("Files list should be at least 1 size.");
        for (File inputFile : inputFiles) {
            if (!inputFile.exists())
                throw new IOException("Could not file input file " + inputFile);
            if (!inputFile.isFile()) throw new IOException("Input must be a file.");
        }
        mInputFiles = Collections.unmodifiableList(inputFiles);
        mLocale = locale;
        mMaxListSize = maxListSize;
        mOutput = new OutputStreamWriter(new FileOutputStream(outputFile));

        mLangInnerChars = new HashSet<>(additionalInnerWordCharacters.length + wordCharacters.length);
        mLangChars = new HashSet<>(wordCharacters.length);
        for (char c : wordCharacters) {
            mLangChars.add(c);
            mLangInnerChars.add(c);
        }

        for (char c : additionalInnerWordCharacters) {
            mLangInnerChars.add(c);
        }

        mWords = new HashMap<>();

        System.out.println(String.format(Locale.US, "Parsing %d files for a maximum of %d words, and writing into '%s'.", mInputFiles.size(), mMaxListSize, outputFile));
    }