[Ajuda] Problemas em transformar arquivo em um array de bytes

6 respostas Resolvido
jsfjavajavawebweb
S

Boa noite, estou tentando pegar um arquivo pdf de um xhtml, e na hora de salvar no banco, quero transformá-lo em um array de bytes, para isso, no meu DAO eu faço assim:

public boolean CadastrarAluno(Aluno a) throws FileNotFoundException {
		Connection con = Conexao.getConnection();
		PreparedStatement stmt = null;
		try {
			String sql = "INSERT INTO aluno(matricula, instituicao, curso, id_pessoa,arquivo) values(?,?,?,?,?)";
			stmt = con.prepareStatement(sql);
			stmt.setInt(1, a.getMatriculaAluno());
			stmt.setString(2, a.getInstituicao());
			stmt.setString(3, a.getCurso());
			stmt.setInt(4, ultimaId);
			
			FileInputStream fis = new FileInputStream(a.getArquivorecebido());
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			byte[] buf = new byte[1024];
			try {
			   for (int readNum; (readNum = fis.read(buf)) != -1;) {
			      bos.write(buf, 0, readNum); //no doubt here is 0
			   }
			} catch (IOException ex) {
			   ex.printStackTrace();
			}
			byte[] bytes = bos.toByteArray();
			
			stmt.setBytes(5, bytes);
			stmt.executeUpdate();
			System.out.println("Query-------"+stmt);
			return true;
		} catch (SQLException ex) {
			System.out.println(ex);
			return false;
		} finally {
			Conexao.closeConnection(con, stmt);
		}
	}

Parte do meu xhtml que recebe o arquivo

<p:fileUpload id="declaracao" value="#{alunoMB.aluno.arquivorecebido}" mode="simple" dragDropSupport="false" update="messages" sizeLimit="100000" fileLimit="1"/>

Minha classe modelo:

private int idAluno;
	private File arquivorecebido;
	
	public File getArquivorecebido() {
		return arquivorecebido;
	}

	public void setArquivorecebido(File arquivorecebido) {
		this.arquivorecebido = arquivorecebido;
	}

Mas quando eu executo, me retorna o erro:

java.lang.NullPointerException
	at java.io.FileInputStream.<init>(FileInputStream.java:130)

Da a entender que eu tenho que inicializar esse file input stream, mas não entendi como, se alguém puder dar um norte eu agradeço

6 Respostas

V

Veja este exemplo de como inicialiar um stream, talvez ajude:

File f = new File("arquivo.txt");
		//criar stream
		InputStream in = null;
		try{
		in = new BufferedInputStream(new FileInputStream(f));
}finally{
		//fechar arquivo
		if(in != null)
			in.close();
 	}
S

O seu método getArquivorecebido() está retornando null por isso o construtor do FileInputStream lança exceção.

S

Resolvi assim, mas só consigo carregar o arquivo estaticamente

//converter arquivo

     File file = new File("C:\\Users\\elisson\\Downloads\\documento.pdf");
      byte[] bFile = new byte[(int) file.length()];
      FileInputStream fileInputStream = null;
      try {
       fileInputStream = new FileInputStream(file);
       fileInputStream.read(bFile);
       fileInputStream.close();
       System.out.println("Meu array--------"+bFile); // Olha o array de byte
      }catch(Exception e){
       System.out.println(e);
      }

Se fizer um:
File file = new File(a.getArquivorecibido);
ele não funciona, ele espera uma String, estou trabalhando pra resolver isso

V
Solucao aceita

É que o File espera o local do arquivo e não o arquivo em sí por isso precisa ser uma String. No lugar de e.getArquivoRecebido(), tenta colocar o local que este arquivo esta salvo.

S

Deu certo, valeu

V

Que bom que ajudei!

Criado 21 de julho de 2019
Ultima resposta 23 de jul. de 2019
Respostas 6
Participantes 3