(Resolvido)Remover caracter especiais da string

Bom dia galera, poderia me ajudar por favor estou tentando solucionar esse codigo faz 2 semana, muitas pessoas me ajudaram mais sempre da erro, estou fazendo algo de errado tenho certeza, eu tenho um codigo que busca todos os anexo dentro de um email, ele traz todos os anexos mais os anexo que estão com o nome que usa caracter especial ele da erro, como eu tiro esse caracter.

protected final Variant urimsalvarAnexoemail( Variant messageVar, Variant Caminho) throws Exception {  
	String teste = Caminho.getString();        
	
	// Verifica se a mensagem passada como parâmetro é um objeto Message
	Object messageObj = messageVar.getObject();
	
	if (!(messageObj instanceof javax.mail.Message)) {
		return Variant.VARIANT_NULL;
	}
	
	javax.mail.Message message = (javax.mail.Message) messageObj;
	String tipoDeConteudo = message.getContentType();
	
	if (!tipoDeConteudo.contains("multipart")) {
		return Variant.VARIANT_NULL; // não há anexos
	}
	
	javax.mail.Multipart conteudo = (javax.mail.Multipart) message.getContent();
	int partes = conteudo.getCount();
	
	for (int i = 0; i < partes; i++) { // iterar as partes e extrair os anexos
		javax.mail.Part parte = conteudo.getBodyPart(i);
		
		if (!parte.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())) {
			continue; // essa parte não é um anexo
		}
		
		String nomeDoArquivo = parte.getFileName();
		//nomeDoArquivo=Functions.translateAcentos();
		teste = teste += nomeDoArquivo;
		InputStream entrada = parte.getInputStream(); // esse é o anexo do email
		OutputStream saida = new FileOutputStream(teste); // esse é o arquivo em disco 
		
		// copiar os bytes da entrada para a saida
		byte[] bytes = new byte[8192]; // buffer de 8KB
		
		for (int lidos = -1; (lidos = entrada.read(bytes)) != -1; saida.write(bytes, 0, lidos)) { /* for sem corpo mesmo */ }
		saida.flush();
		saida.close();     
	}
	
	return VariantPool.get(teste);
}

Capturar

Que erro?
Em que momento acontece o erro?

Você pôs em comentário o seguinte trecho de código:

nomeDoArquivo = Functions.translateAcentos();

Posta o fonte desse método translateAcentos() como ele sabe de qual String deve remover os acentos se ele não recebe nada como parâmetro?

Deu certo já muito obrigado pela atenção amigão vlw mesmo

1 curtida

protected final Variant UrimSalvarAnexoEmail(Variant messageVar, Variant Caminho) throws Exception {
String CaminhoCompleto = null;

// Verifica se a mensagem passada como parâmetro é um objeto Message
Object messageObj = messageVar.getObject();

if (!(messageObj instanceof javax.mail.Message)) {
return Variant.VARIANT_NULL;
}

javax.mail.Message message = (javax.mail.Message) messageObj;
String tipoDeConteudo = message.getContentType();

if (!tipoDeConteudo.contains(“multipart”)) {
return Variant.VARIANT_NULL; // não há anexos
}

javax.mail.Multipart conteudo = (javax.mail.Multipart) message.getContent();
int partes = conteudo.getCount();

for (int i = 0; i < partes; i++) { // inteirar as partes e extrair os anexos
javax.mail.Part parte = conteudo.getBodyPart(i);

if (!parte.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())) {
continue; // essa parte não é um anexo

}
CaminhoCompleto = Caminho.getString();
String nomeDoArquivo = parte.getFileName(); // nome do anexo
nomeDoArquivo = javax.mail.internet.MimeUtility.decodeText(nomeDoArquivo); // nome do anexo com a conversão de caracter
CaminhoCompleto = CaminhoCompleto += nomeDoArquivo; //junção do caminho + nome do arquivo
InputStream entrada = parte.getInputStream(); // esse é o anexo do email
OutputStream saida = new FileOutputStream(CaminhoCompleto); // esse é o arquivo em disco

// copiar os bytes da entrada para a saida
byte[] bytes = new byte[8192]; // buffer de 8KB
for (int lidos = -1; (lidos = entrada.read(bytes)) != -1; saida.write(bytes, 0, lidos)) { /* for sem corpo mesmo */ }
saida.flush();
saida.close();

}

return VariantPool.get(CaminhoCompleto);
}