Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a file from an OutputStream

I have this problem that I am creating a file but this is creating empty file.

I am using a API of Dropbox, Code of Dropbox operate good, but I don't Know that I don't fine. I have used 2º and 3º Codes for my app, this is operating good.

This operate by hierarchically. I am sending outputStream for the fuction. But this is empty.

I am using outputStream because I need that this operates with outputstream.

1º Code(Class Test || Call):

File tempFile=new File("C:\\PRUEBAS_TFG\\cloud.png"); if ( ! tempFile.exists() ) { tempFile.createNewFile(); } 
File file = new File("C:\\PRUEBAS_TFG\\cloud.png");
OutputStream outputStream = new FileOutputStream(file);
catmanager.downloadFilesToItem(catmanager.getAllListCatalog().get(0), catmanager.getAllListCatalog().get(0).getItems().get(2), listFile, outputStream);
outputStream.close();

2º Code(Class catmanager || 1ºbody):

public void downloadFilesToItem(Catalog catalog, Item item, List<String> files, OutputStream output){
    try{
        String fsPath;
        fsPath = pathCatalog(catalog);
        getFSManager().changeDirectoryConfigNPath(fsPath+"/"+item.getName()+"_item");
        for(int i = 0;i<files.size();i++){
            getFSManager().downloadFile(files.get(i), output);
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}

3ºCode(Class FSManager || 2ºbody)

public void downloadFile(String fileName, OutputStream output) throws IOException{//Aqui deveria Buscar el Fichero Funciona por que da la casualidad que esta el fichero en la primera nube 
    /** Cogemos la lista de FS del usuario */
    List<IFileSystem> aux = getFileSystemsUser();

    for(int i = 0; i < aux.size();i++){
        /** Se realiza la Funcionalidad del metodo*/
        System.out.println(aux.get(i).toString());
        try{
            aux.get(i).downloadFile(_listPath.get(i)+"/"+fileName, output);
            i = aux.size()+1;
        }catch(IOException e) {

        }
    }
}

4ºCode(Class aux Dropbox || API Dropbox):

public void downloadFile(String fileName, OutputStream aux) throws IOException{
    try{
        getDbxClient().getFile(fileName, null, aux);
    }catch(IOException e){
        throw e;
    }catch(DbxException u){
        throw new IOException(u.getCause());
    }
}

Thanks Advance.

like image 518
Pablo García Tamarit Avatar asked Nov 08 '22 11:11

Pablo García Tamarit


1 Answers

You are using one FileOutputStream for downloading a list of file. Do you expect to merge the files (in one image), or something like that?

If is is not expected, I certainly would not pass the FileOutputStream as input parameter of your successive calls (2,3,4), but an instance of File representing the folder. In your last method (4), create (and close after download) a new FileOutputStream for a file in that folder. Something like

public void downloadFile(String fileName, File folder) throws IOException{
  OutputStream outputStream = new FileOutputStream(new File(folder, filename));
  try{
    getDbxClient().getFile(fileName, null, outputStream );
  }catch(IOException e){
    throw e;
  }catch(DbxException u){
    throw new IOException(u.getCause());
  }finally {
    outputstream.close();
  }
}
like image 180
Loic Mouchard Avatar answered Nov 14 '22 22:11

Loic Mouchard