关于通过java驱动api下载文件
我使用java驱动api中的“get”方法,可以获取inputstream。但是当我使用inputstream创建文件时,我无法打开它。好像文件坏了关于通过java驱动api下载文件,java,google-drive-api,Java,Google Drive Api,我使用java驱动api中的“get”方法,可以获取inputstream。但是当我使用inputstream创建文件时,我无法打开它。好像文件坏了 private static String fileurl = "C:\\googletest\\drive\\"; public static void newFile(String filetitle, InputStream stream) throws IOException { String filepath = fileurl
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
调用都可能返回部分已满的缓冲区。但是,然后将整个缓冲区内容写入输出流。。。包括以前阅读的“垃圾”
第二个和第三个问题中的一个或两个都可能导致文件损坏。事实上,第三个可能是。你得到了什么例外?“java驱动api”这到底是什么?
private static String fileurl=“C:\\googletest\\drive\\”
该属性名称具有误导性,因为内容绝不代表URL。它可能是一个有效的文件路径。没有例外,它成功创建了文件,但我无法打开该文件。提示:添加@CAMOBAP(或其他人)以通知他们新的注释。谢谢~i修复它,我可以很好地打开该文件~int available=-1;而((available=bufferedInputStream.read(buffer))>0){bufferedOutputStream.write(buffer,0,available);}OK。。。但是我不认为“available”是该变量的好名字,因为它暗示了available()
方法返回的值。我把它叫做bytesRead或者类似的东西。