关于通过java drive api下载文件

时间:2013-04-17 09:45:52

标签: java google-drive-api

我使用java驱动器api中的“get”方法,我可以获得输入流。但是当我使用输入流创建它时,我无法打开文件。它喜欢文件坏了。

private static String fileurl = "C:\\googletest\\drive\\";

public static void newFile(String filetitle, InputStream stream) throws IOException {
    String filepath = fileurl + filetitle;      
    BufferedInputStream bufferedInputStream=new BufferedInputStream(stream);
    byte[] buffer = new byte[bufferedInputStream.available()];


    File file = new File(filepath);
    if (!file.exists()) {
        file.getParentFile().mkdirs();

        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(filepath));
          while( bufferedInputStream.read(buffer) != -1) { 
              bufferedOutputStream.write(buffer);
      }  
          bufferedOutputStream.flush();
          bufferedOutputStream.close();
    }
}

1 个答案:

答案 0 :(得分:1)

首先,C:\googletest\drive\不是网址。它是文件系统路径名。

接下来,以下内容可能与您的想法无关:

  byte[] buffer = new byte[bufferedInputStream.available()];

问题是available()调用可以返回零...对于非空流。 available()返回的值是估计值当前可用于读取的字节数。这不一定是流长度......或与之相关的任何内容。事实上,即使有数据需要读取,某些设备始终的设备驱动程序也会返回零。

最后,这是错误的:

   while( bufferedInputStream.read(buffer) != -1) { 
          bufferedOutputStream.write(buffer);

您假设read返回-1表示填充缓冲区。事实并非如此。任何一个read调用都可以返回部分完整的缓冲区。但是然后你将整个缓冲区内容写入输出流......包括" junk"从以前的读物。


第二个和第三个问题中的任何一个或两个都可能导致文件损坏。事实上,第三个可能到。