Pessoal gostaria de uma ajuda, vou contar o que eu quero fazer:
Tenho que fazer upload de um arquivo ".XML " , eu pego esse
arquivo transformo em um array de bytes e jogo no banco postgresSQL.
Até aqui deu tudo certo, só que eu gostaria de saber como eu faço
para pegar esse array de bytes e transforma-lo no meu arquivo “.XML” original.
Se alguém poder postar o código, ficaria grato.
Desde já agradeço a ajuda.
Classe FileOutputStream, método write; esse método recebe um array de bytes e o grava em um arquivo. Não se esqueça de fechar o arquivo (método “close”).
[quote=ncm]Posso estar errado, mas seu problema pode ser a falta do flush();
Antes de fechar o arquivo, chame o método flush(), que ele escreve físicamente o arquivo.
Tenta aew e posta a resposta.
[code]
public void retornaXML(){
Statement stmt;
String query = "select arquivo from historico_envio where id = "+4;
try{
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(query);
byte[] b = null;
while (rs.next()){
b = rs.getBytes("arquivo");
}
FileOutputStream fileOutputStream = new FileOutputStream(new File("/home/deivid/Desktop/aluno.xml"));
fileOutputStream.write(b);
fileOutputStream.flush(); // <<--- ATENÇÃO AQUI
fileOutputStream.close();
}catch (Exception e) {
e.printStackTrace();
}
}
[/code][/quote]
Cara coloquei o fileOutputStream.flush(); mas continuou com o mesmo problema: o arquivo só grava “[B@4845aa”
Alguém poderia olhar o método loadBytes se estar realmente passarndo um arquivo para um array de bytes, desde já agradeço.
Comigo o seu código funcionou, ele leu direitinho o arquivo
Mas eu fiz outro que faz exatamente a mesma coisa.
Vou postar só para você ver.
De qualquer forma o problema não está na transformação em bytes.
Me diz ai qual é o tipo da coluna do banco que recebe esses bytes?
private static byte[] loadBytes(String name) {
FileInputStream in = null;
try {
in = new FileInputStream(name);
ByteArrayOutputStream byteArrayStream/* buffer */= new ByteArrayOutputStream();
int bytesread = 0;
byte[] tbuff = new byte[1024];
while ((bytesread = in.read(tbuff)) != -1) {
byteArrayStream.write(tbuff, 0, bytesread);
}
return byteArrayStream.toByteArray();
} catch (IOException e) {
if (in != null) {
try {
in.close();
} catch (IOException e2) {
}
}
return null;
}
}
Pessoal, o problema era na hora de salvar no banco eu estava salvando errado.
Os dois métodos citados acima estão corretos.
Agradeço a todos pela ajuda.