2016-05-06 2 views
1
private static String encodeFileToBase64Binary(String fileName) 
     throws IOException { 

    File file = new File(fileName); 
    byte[] bytes = loadFile(file); 
    byte[] encoded = Base64.encodeBase64(bytes); 
    String encodedString = new String(encoded,StandardCharsets.US_ASCII); 

    return encodedString; 
} 
private static byte[] loadFile(File file) throws IOException { 
    InputStream is = new FileInputStream(file); 

    long length = file.length(); 
    if (length > Integer.MAX_VALUE) { 
     // File is too large 
    } 
    byte[] bytes = new byte[(int)length]; 

    int offset = 0; 
    int numRead = 0; 
    while (offset < bytes.length 
      && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { 
     offset += numRead; 
    } 

    if (offset < bytes.length) { 
     throw new IOException("Could not completely read file "+file.getName()); 
    } 

    is.close(); 
    return bytes; 
} 

// получить закодироватьJava Encode файл Base64 строки Для соответствия с другими закодированной строки

снабжать струной, тетивой и т.п.
String encoded=encodeFileToBase64Binary("file.fmr"); 

// кодированная строка:

Rk1SACAyMAAAAAFiAAABQAHgAMUAxQEAAABGNkDZADP/SEC8AD6CSECqAEcGSED+AFJtO0CgAGCKZEC6AGuFZEDgAHz1ZECzAI6HZEENAJluNEBWAJ4ZZEB1AKkTZEECALbuZEA/ALqfSECCALySSECxAMP/ZECIAMURVUAXAN2jGkCnAOD8ZEAoAOWlZEBnAOyhLkCyAP/tZECHAQMSGkD8AQTdZECfASKFGkCHASUaGkA1ASy6ZEDAAS3JZEDPAS7NZEAnATG4ZEDxATzOZEBOAUPLZEBzAVbuGkCAAWF8NEDTAWsxLkDnAXa0LkC/AX2nLkC0AYojIEBMAYvkSEDJAa0fT0CsAbwVIIDqANTsZIDIAPfnZICbAQKHO4D5AR/XZIBlASS7IIEoASbYO4CsAUetLoDvAVXSZIDaAVvDO4EHAWrLZICsAX2fNIDnAYEwNIDQAZKnT4BfAZxtZAAA 

// закодированную строку из файла используя какой-то другой источник.

Rk1SACAyMAAAAAFiAAABQAHgAMUAxQEAAABGNkCLACELSEDAADYDZEEYAGFxO0DGAGJ9SEC1AGkCSEA6AHWYVUDJAHp5ZEBEAHwVZECVAJgIZEEaALHrZEB4ALuOZEELAMFqZEEzAM/sNEDRANvwZEBkAN0VZECcAOIAZEEwAOjnLkEvAPXlO0CnAP71ZEB7AQYRNEBdAQ0eZED8ARDhZEDXASXcZECZAS3uGkBoAT4eO0AUAUMxSEA7AUYqZEDxAUnSZECmAVNDO0EIAXDHSEDYAXW7ZEEUAXXKSEEGAYY8IEEhAYrDNEDfAZ81ZEDQAcGqLoEBAC/7O4EGAE7zVYB+AP2QSICEARuLZIBnATUfO4D/ATXaZIDEATjSZIDRATrVZICnATvSNIBTATwnZIARAV1LGoB1AV2oO4CrAV68SIDnAWHGZIB+AWauNICVAX0ySICNAYytO4CJAZorSAAA 

Когда я пытаюсь сопоставить закодированную строку, я получаю missmatch. предложите метод для кодирования файла base64 для соответствия закодированной строке, найденной из другого источника. Я пробовал с StandardCharsets.UTF_8 и StandardCharsets.US_ASCII.

ответ

7

Вы уже используете apache commons-codec, поэтому я рекомендую добавлять commons-io для чтения файла. Таким образом, вы можете удалить свой метод loadFile() и просто иметь:

private static String encodeFileToBase64Binary(String fileName) throws IOException { 
    File file = new File(fileName); 
    byte[] encoded = Base64.encodeBase64(FileUtils.readFileToByteArray(file)); 
    return new String(encoded, StandardCharsets.US_ASCII); 
} 
+0

Благодарим за отзыв. но я получаю такой же результат в кодировке. – user1581768

+0

Я проверил это с несколькими файлами и внешним кодером Base64. Можете ли вы предоставить пример файла? – gfelisberto

+1

сталкивается с проблемой, Base64.encodeBase64(); не может быть разрешено почему? –