从OutputStream创建文件

时间:2016-08-10 11:35:42

标签: java outputstream fileoutputstream

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

我正在使用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(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());
    }
}

谢谢你。

2 个答案:

答案 0 :(得分:1)

您正在使用一个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();
  }
}

答案 1 :(得分:0)

我想你必须将flush(参见相应的方法)输出到你的文件(并关闭它)。 Dropbox API正在处理OutputStream,但当然不关心您是否要编写文件。

您可以在example之后查看。