簡體   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