public static void processFile(
            List<EncryptionRule> rules,
            String inputFilePath,
            String outputDirectory,
            String outputFileName,
            String delimiter
    ) throws IOException, InvalidKeyException {
        
        List<Integer> columns = EncryptionManager.getColumnIds(rules);

        if (!outputDirectory.trim().endsWith("/")){
            outputDirectory = outputDirectory+"/";
        }    
        
        //FileManager.deleteFile(outputDirectory+outputFileName);
        
        
        BufferedReader bis = new BufferedReader(new FileReader(inputFilePath));
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(outputDirectory+outputFileName, true)));
        
        String line = null;
        int count = 0;

        //process lines
        while ((line = bis.readLine()) != null) {

            String hashedString = "";
            
            if (count == 0){
                String headerString = EncryptionManager.getHeaderString(line, rules, delimiter);

                if (headerString != null && headerString.length() > 0) {
                    //append header
                    out.println(headerString);
                }
                
            }else{
                hashedString = EncryptionManager.getHashedString(line, rules, delimiter);
                if (hashedString != null && hashedString.length() > 0) {
                    out.println(hashedString);
                }
            
            }

            count++;
            if ((count % 1000) == 0) {
                System.out.println(count + " records processed");
            }
        
        }
        bis.close();
        out.close();
    }