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

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

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

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

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

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

Deu certo, valeu

Que bom que ajudei!

1 curtida