java – 从OutputStream创建一个文件

我有这个问题,我正在创建一个文件,但这是创建空文件.

我使用的是Dropbox的API,Dropbox的代码运行良好,但我不知道我不好.我已经为我的应用程序使用了2º和3º代码,这是运行良好.

这通过分层次操作.我正在发送outputStream用于功能.但这是空的.

我正在使用outputStream,因为我需要它与outputstream一起运行.

1º代码(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(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());
    }
}

谢谢提前.

最佳答案 您正在使用一个FileOutputStream来下载文件列表.你期望合并文件(在一个图像中),或类似的东西?

如果不是预期的,我当然不会将FileOutputStream作为连续调用的输入参数(2,3,4),而是表示文件夹的File实例.在上一个方法(4)中,为该文件夹中的文件创建(并在下载后关闭)新的FileOutputStream.就像是

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