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