Transformar array de bytes em arquivo

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”).


	java.io.File file = new java.io.File(caminho);
	FileOutputStream in = new FileOutputStream(file) ;  
	in.write(byteArray);
	in.close();

Onde:

caminho = destino (“C:\teste\arquivo.xml”)
byteArray = o array de bytes

Meu código é o seguinte:

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.close();
			
		}catch (Exception e) {
			e.printStackTrace();
		}
	}

E aqui está o código que eu transformo o arquivo em um array de byte:

private byte[] loadBytes(String name) {
		FileInputStream in = null;

		try {
			in = new FileInputStream(name);
			ByteArrayOutputStream buffer = new ByteArrayOutputStream();
			
			int bytesread = 0;
			byte[] tbuff = new byte[512];

			while (true) {
				bytesread = in.read(tbuff);
				if (bytesread == -1) // if EOF
					break;
				buffer.write(tbuff, 0, bytesread);
			}
			return buffer.toByteArray();
		} catch (IOException e) {
			if (in != null) {
				try {
					in.close();
				} catch (IOException e2) {
				}
			}
			return null;
		}
	}

Só que na hora de carregar o conteúdo do banco para o arquivo, só aparece o seguinte dentro do arquivo “[B@4845aa”

entanglement, agradeço sua ajuda.

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.

 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();  
         }  
     }

[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.

E como você está fazendo para salvar esse array de bytes no banco?

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.