我正在编写一个从服务器下载PDF文件的程序。我正在使用这里给出的一些程序Download file by passing URL using java code,这个解决方案适用于第一个答案中提供的示例URL,但不适用于PDF,我只是替换了URL。以下是我的代码。
import java.io.*;
import java.net.*;
public class FileDownloadTest {
final static int size = 1024;
public static void fileUrl(String fAddress, String localFileName, String destinationDir) {
// localFileName = "Hello World";
OutputStream outStream = null;
URLConnection uCon = null;
InputStream is = null;
try {
URL url;
byte[] buf;
int byteRead, byteWritten = 0;
url = new URL(fAddress);
outStream = new BufferedOutputStream(new FileOutputStream(destinationDir + "\\" + localFileName));
uCon = url.openConnection();
is = uCon.getInputStream();
buf = new byte[size];
while ((byteRead = is.read(buf)) != -1) {
outStream.write(buf, 0, byteRead);
byteWritten += byteRead;
}
System.out.println("Downloaded Successfully.");
System.out.println("File name:\"" + localFileName + "\"\nNo ofbytes :" + byteWritten);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
is.close();
outStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void fileDownload(String fAddress, String destinationDir) {
int slashIndex = fAddress.lastIndexOf('/');
int periodIndex = fAddress.lastIndexOf('.');
String fileName = fAddress.substring(slashIndex + 1);
if (periodIndex >= 1 && slashIndex >= 0 && slashIndex < fAddress.length() - 1) {
fileUrl(fAddress, fileName, destinationDir);
} else {
System.err.println("path or file name.");
}
}
public static void main(String[] args) {
String fAddress = "http://singztechmusings.files.wordpress.com/2011/09/maven_eclipse_and_osgi_working_together.pdf";
String destinationDir = "D:\\FileDownload";
fileDownload(fAddress, destinationDir);
}
}
这里,这个pdf有73页,在我的文件夹中,它是以1KB的PDF格式下载,当在Acrobat Reader中打开时,它说文件可能已损坏。
我也尝试过这里提供的代码https://dzone.com/articles/java-how-save-download-file,但结果是一样的。
请告诉我如何解决此问题。
由于
答案 0 :(得分:1)
如果您检查下载的文件内容,则可以看到它是html。服务器正在将原始请求重定向到https url。请使用网址 https ://singztechmusings.files.wordpress.com/2011/09/maven_eclipse_and_osgi_working_together.pdf。
或者使用带有自动重定向处理功能的http客户端,ala http://webdemo.dac.co.jp/nt/radio/audio_test.html
答案 1 :(得分:0)
您定义变量size = 1024
并使用它来定义您的缓冲区。
所以逻辑上你只能写1 KB。
但是如果输入Stream一次读取更多,它将会丢失...所以将缓冲区大小更改为能够包含大多数文档或尝试确定必要大小的值