Java – Ler um arquivo e codifica-lo para Base64 – Converter File para Base64 (Encode file to Base64)

java

 private String encodeFileToBase64Binary(File file)
            throws IOException {

        byte[] bytes = loadFile(file);
        byte[] encoded = Base64.getEncoder().encode(bytes);
        String encodedString = new String(encoded);

        return encodedString;
    }

    private byte[] loadFile(File file) throws IOException {
        byte[] bytes;
        try (InputStream is = new FileInputStream(file)) {
            long length = file.length();
            if (length > Integer.MAX_VALUE) {
                throw new IOException("File to large " + file.getName());
            }
            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());
            }
        }
        return bytes;
    }

Java/Kotlin -Utilizando um unico array para os argumentos do String.format() (String.format() takes an array as a single argument)

java_kotlin

Como passar os argumentos de um String format em uma unica lista de parametros.

Em Java:

        
        String a = "V1: %s - V2: %s - V3: %s";
        List strings = new ArrayList();
        strings.add("var1");
        strings.add("var2");
        strings.add("var3");

        System.out.println(String.format(a, (Object[]) strings.toArray()));

Em Android utilizando Kotlin:

       
        val a = "V1: %s - V2: %s - V3: %s"
        val strings = ArrayList()
        strings.add("var1")
        strings.add("var2")
        strings.add("var3")

        println(String.format(a, *strings.toTypedArray() as Array<*>))

Java – Criando um serviço WEB para executar fora de um container java (web server standalone with grizzly-http-server / jersey-server / javax.ws.rs)

javaeeNesta publicação vamos mostrar como criar um servidor web standalone, ou seja, vamos compilar o projeto como um jar e executa-lo pelo terminal sem a necessidade de precisar dar deploy em um container java (exemplo: glassfish, toncat, etc). Para isso vamos criar um projeto java com o maven para incluir as seguintes dependências:

javax: javaee-web-api
org.glassfish.grizzly: grizzly-http-server, grizzly-framework
org.glassfish.jersey.core: jersey-server, jersey-common, jersey-client
org.glassfish.jersey.media: jersey-media-sse, jersey-media-json-processing
org.glassfish.jersey.containers: jersey-container-grizzly2-http, jersey-container-servlet

Essas dependências permitem criar um web server e subir sua aplicação em um container próprio. As dependências do javax nos permite criar o serviço web REST, a grizzly fica responsável pelo servidor web e a jersy pelo container. Nesse projeto não vamos chegar a usar todas essas dependências porem vamos deixar no projeto.

Iniciaremos o projeto configurando o pom.xml: Continue reading

Maven – Gerar uma distribuição com suas dependências / Gerar um FatJar / Configurar o JavaExec / Configurar Manifest

maven

Segue um script de configuração para compilar projetos java e gerar uma distribuição com todas dependências, com opcional de fatJar.
- Configurar o Manifest
- Configurar a execução pela IDE através do type: JavaExec
- Gerar uma distribuição com as dependências dentro da pasta libs/
- Gerar uma distribuição fatJar
- Maven Can’t execute jar- file: “no main manifest attribute”

ARQUIVO POM.XML: Continue reading

Java / GSON – Serializing and Deserializing Generic Types

gson - json

Quando você chama .toJson(obj) o Gson internamente usa obj.getClass() para obter informações sobre os campos para serializar. Da mesma forma na deserialização se passa MyClass.class no método fromJson(json, MyClass.class). Isso funciona bem se o objeto é um tipo não-genérico. No entanto, se o objeto é de um tipo genérico as informações são perdida porcausa da sua generalização. Segue um exemplo:

class Foo<T> {
  T value;
}

Gson gson = new Gson();

Foo<Bar> foo = new Foo<Bar>();
// Não pode serializar foo.value corretamente:
gson.toJson(foo);
// Falha ao deserializar foo.value as Bar:
gson.fromJson(json, foo.getClass()); 

O código acima não consegue interpretar  o valor como um tipo Bar porque o Gson invoca list.getClass() para pegar a informação da classe, mas esse método retorna uma classe cru, Foo.class. Isto significa que Gson não têm nenhuma maneira de saber que este é um objeto do tipo Foo <Bar>, e não simplesmente Foo.

Você pode resolver esse problema especificando o tipo correto para o seu tipo genérico. Você pode fazer isso usando a classe TypeToken veja o exemplo: Continue reading

Java – Como utilizar a FutureTask, controlando o timeout e status de uma thread

multithreadingFutureTask é uma implementação da interface Future a ser executada numa chamada em paralelo. Sendo possível cancelar a execução de uma tarefa, descobrir se a execução já terminou com sucesso ou erro, entre outras operações.

A FutureTask precisa de uma interface para a implementação de uma execução em paralelo. a Callable é parecida com a interface Runnable, mas esta não retorna nenhum valor, enquanto a Callable deve retornar um valor ao final da execução;

MÉTODOS DO FUTURE:

future.cancel(boolean mayInterruptIfRunning) : Cancela o processamento, passar true para interromper se ela ja está iniciada, ou false para cancelar se ainda nao foi iniciada.
future.get(long timeout, TimeUnit unit)  : Espera a resposta da execução de acordo com timeout.
future.get() : Espera a resposta da execução.
future.isDone() : Verifica se a execução já acabou.
future.isCancelled() : Verifica se o processamento foi cancelado.

Exemplo: Continue reading

Java – Bitwise and Bit Shift Operators

/**
 * Bitwise and Bit Shift Operators
 * 
 * Constantes: move 1bit para casa determinada após '<<' x
 * 
 * Varival i: Recebe uma operaçao OU das constantes pedidas;
 * A -   001
 * B -   010
 * C -   100 (Operacao OU)
 * _________
 * Resp: 111 (i = 111 (ou 7 decimal))
 * 
 * Verificacao das constantes dentro da variavel: 
 * - Realiza uma operaçao AND entre a variavel e a constante, se o valor
 * for diferente de 0, contem a constante dentro da variaval:
 * 
 * Exemplo caso i = A|C;
 * i - 101 
 * C - 100 (Operacao AND)
 * _______
 * Resp: 100 (valor != de 0, entra na condiçao (ou 4 dec))
 *
 * Exemplo caso i = A|C;
 * i - 101 
 * B - 010 (Operacao AND)
 * _______
 * Resp: 000 (valor == de 0, nao entra na condiçao)
 * 
 * @author Guilherme Biff Zarelli e Guilherme Alves Silveira
 */
public class teste2 {

    public static final int A = 1 << 1;
    public static final int B = 1 << 2;
    public static final int C = 1 << 3;

    public static void main(String[] args) {
        //ATRIBUICAO DAS CONSTANTES NA VARIAVAL:
        int i = A | C | B; 
        System.out.println(i);//VALOR DA OPERACAO OU
        
        //VERIFICAÇAO DAS CONSTANTES DENTRO DA VARIAVEL:
        if ((i & A) != 0) {
            System.out.println("CONTEM CONSTANTE A");
        }
        if ((i & B) != 0) {
            System.out.println("CONTEM CONSTANTE B");
        }
        if ((i & C) != 0) {
            System.out.println("CONTEM CONSTANTE C");
        }
    }
}

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

Java – Erro: SSLHandshakeException: …validator.ValidatorException: PKIX path building failed: …SunCertPathBuilderException: unable to find valid certification path to requested target

error sslhandshake

ERROR: SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

Solução 1:

URL url = new URL("https://exemplo1");
HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();

  conn1.setHostnameVerifier(new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
      return true;
    }
  });

Solução 2: Continue reading