Trabalhando com Stream - Resolvido

3 respostas
E

Pessoal, estou querendo pegar um Stream(uma imagem no caso) e gravar em outro arquivo

estou realizando os seguinte procedimentos

public void upload(FileUploadEvent event) throws IOException {
        UploadedFile uf = event.getFile();
        File f = new File("C:\\Documents and Settings\\erick.macedo\\Meus documentos\\"+uf.getFileName());
        
        InputStream  is = uf.getInputstream();// retorna um InputStream
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
       
        FileWriter fw = new FileWriter(f);
        String linha = new String();
        while((linha = br.readLine()) != null){
            fw.write(linha);
        }
       
        br.close();
        fw.close();
       
        FacesMessage msg = new FacesMessage("Upload realizado com Sucesso!", event.getFile().getFileName());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

então ele criar o arquivo de imagem, porem quando vou visualizar este arquivo, não consigo mensagem de “Visualização não Disponível”

Alguem sabe como resolver isto?

Deste ja agradeço.

3 Respostas

E

Quando você vai trabalhar com arquivos, você não pode usar classes que terminam com ___Reader ou ___Writer, que são feitas para trabalhar com texto, não com dados binários (incluindo imagens).Você também não pode usar strings e readLine, como você fez.

O sintoma que ocorre é que o arquivo final fica com os bytes diferentes do arquivo original, e pode até ser que ele fique com tamanho diferente.

Quando isso ocorre, o visualizador de imagens simplesmente não consegue abrir a imagem.

Use apenas as classes que terminam com ___InputStream ou ___OutputStream. OK?

E

Ola amigo, primeiramente quero agradecer pela sua resposta, bom intendi, porem não estou conseguindo fazer isto na prática, tentei fazer das seguintes formas abaixo, porem não obtive sucesso em nenhuma delas.

public void upload(FileUploadEvent event) throws IOException {
        UploadedFile uf = event.getFile();
        File f = new File("C:\\Documents and Settings\\erick.macedo\\Meus documentos\\"+uf.getFileName());

        InputStream  is = uf.getInputstream();
        byte[] b = new byte[is.available()];
        OutputStream os = new FileOutputStream(f);

      for(int i = 0; i < b.length ; i++ ){
            os.write(b[i]);
        }

        os.flush();
        os.close();
        is.close();

        FacesMessage msg = new FacesMessage("Upload realizado com Sucesso!", event.getFile().getFileName());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

2º-

public void upload(FileUploadEvent event) throws IOException {
        UploadedFile uf = event.getFile();
        File f = new File("C:\\Documents and Settings\\erick.macedo\\Meus documentos\\"+uf.getFileName());

        InputStream  is = uf.getInputstream();
        OutputStream os = new FileOutputStream(f);

        os.write(is.read());

        os.flush();
        os.close();
        is.close();

        FacesMessage msg = new FacesMessage("Upload realizado com Sucesso!", event.getFile().getFileName());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

3º-

public void upload(FileUploadEvent event) throws IOException {
        UploadedFile uf = event.getFile();
        File f = new File("C:\\Documents and Settings\\erick.macedo\\Meus documentos\\"+uf.getFileName());

        InputStream  is = uf.getInputstream();
        byte[] b = new byte[is.available()];
        OutputStream os = new FileOutputStream(f);

       os.write(b);

        os.flush();
        os.close();
        is.close();

        FacesMessage msg = new FacesMessage("Upload realizado com Sucesso!", event.getFile().getFileName());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

public void upload(FileUploadEvent event) throws IOException {
        UploadedFile uf = event.getFile();
        File f = new File("C:\\Documents and Settings\\erick.macedo\\Meus documentos\\"+uf.getFileName());

        InputStream  is = uf.getInputstream();
        byte[] b = new byte[is.available()];
        OutputStream os = new FileOutputStream(f);

        os.write(is.read(b)); 

        os.flush();
        os.close();
        is.close();

        FacesMessage msg = new FacesMessage("Upload realizado com Sucesso!", event.getFile().getFileName());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

Nenhum desses jeitos funcionaram, aconteceu a mesma coisa do exemplo anterior, ele não exibe a imagem.

Obrigado

E

Consegui resolver desta forma

public void upload(FileUploadEvent event) throws IOException {
        UploadedFile uf = event.getFile();
        File f = new File("C:\\Documents and Settings\\erick.macedo\\Meus documentos\\" + uf.getFileName());

        InputStream is = uf.getInputstream();// retorna um InputStream
        byte[] b = new byte[is.available()];
        
        OutputStream os = new FileOutputStream(f);
        
        while (is.read(b) > 0) {
            os.write(b);
        }

        os.flush();
        os.close();
        is.close();

        FacesMessage msg = new FacesMessage("Upload realizado com Sucesso!", event.getFile().getFileName());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

Obrigado a todos.

Criado 30 de junho de 2010
Ultima resposta 1 de jul. de 2010
Respostas 3
Participantes 2