gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:40:07 25 4
gpt4 key购买 nike

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

最佳答案

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

接下来,以下内容可能不会像您想象的那样:

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

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

最后,这是错误的:

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

您假设read返回-1意味着它填充了缓冲区。事实并非如此。任何一个read 调用都可能返回部分满的缓冲区。但随后您将整个缓冲区内容写入输出流...包括以前读取的“垃圾”。

<小时/>

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

关于java - 关于通过java驱动api下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16056786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com