[英]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.