繁体   English   中英

关于通过Java驱动器api下载文件

[英]about download a file by java drive api

我使用Java驱动器api中的“ get”方法,可以获得输入流。 但是当我使用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调用都可以返回部分已满的缓冲区。 但是随后您将整个缓冲区的内容写入输出流中,包括先前读取的“垃圾”。


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM