Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于通过java驱动api下载文件_Java_Google Drive Api - Fatal编程技术网

关于通过java驱动api下载文件

关于通过java驱动api下载文件,java,google-drive-api,Java,Google Drive Api,我使用java驱动api中的“get”方法,可以获取inputstream。但是当我使用inputstream创建文件时,我无法打开它。好像文件坏了 private static String fileurl = "C:\\googletest\\drive\\"; public static void newFile(String filetitle, InputStream stream) throws IOException { String filepath = fileurl

我使用java驱动api中的“get”方法,可以获取inputstream。但是当我使用inputstream创建文件时,我无法打开它。好像文件坏了

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

首先,
C:\googletest\drive\
不是URL。它是一个文件系统路径名

接下来,以下内容可能与您认为的不同:

  byte[] buffer = new byte[bufferedInputStream.available()];
问题是
available()
调用可能返回零。。。对于非空流。
available()
返回的值估计当前可读取的字节数。。。马上这不一定是流的长度。。。或者任何与之相关的东西。事实上,某些设备的设备驱动程序始终返回零,即使有数据要读取

最后,这是错误的:

   while( bufferedInputStream.read(buffer) != -1) { 
          bufferedOutputStream.write(buffer);
您假设
read
返回
-1
意味着它填充了缓冲区。事实并非如此。任何一个
read
调用都可能返回部分已满的缓冲区。但是,然后将整个缓冲区内容写入输出流。。。包括以前阅读的“垃圾”



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

你得到了什么例外?“java驱动api”这到底是什么?
private static String fileurl=“C:\\googletest\\drive\\”
该属性名称具有误导性,因为内容绝不代表URL。它可能是一个有效的文件路径。没有例外,它成功创建了文件,但我无法打开该文件。提示:添加@CAMOBAP(或其他人)以通知他们新的注释。谢谢~i修复它,我可以很好地打开该文件~int available=-1;而((available=bufferedInputStream.read(buffer))>0){bufferedOutputStream.write(buffer,0,available);}OK。。。但是我不认为“available”是该变量的好名字,因为它暗示了
available()
方法返回的值。我把它叫做bytesRead
或者类似的东西。