所以我正在尝试使用HttpURLConnection下载PDF文件,我想我已经完成了输入和输出流的一切,但是当我打开下载的PDF文件时(使用Android内置的文件管理器和/或者只是通过将其传输到OS X来检查它,它完全是空的,大小显示为0字节。
我正在尝试下载PDF的网站是:
<子> http://www.pdf995.com/samples/pdf.pdf 子>
这是我的代码
public static void DownloadFile(final String fileURL, final File directory) {
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
try {
FileOutputStream f = new FileOutputStream(directory);
URL u = new URL(fileURL);
c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
//c.setRequestProperty("Content-Type", "application/pdf");
//c.setDoOutput(true);
c.connect();
Log.d("debugz", Integer.toString(c.getContentLength()));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = in.read(buffer)) > 0) {
f.write(buffer, 0, len1);
}
f.flush();
f.getFD().sync();
f.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
}
public static String getPDF(String pdfurl) {
String extStorageDirectory = Environment.getExternalStorageDirectory()
.toString();
File folder = new File(extStorageDirectory, "schematisktscheman");
folder.mkdir();
File file = new File(folder, "schemainfo.pdf");
try {
file.createNewFile();
} catch (IOException e1) {
e1.printStackTrace();
}
DownloadFile(pdfurl, file);
return null; //added return
}
在我的主要活动中:
SchedulePdfProcessor.getPDF("http://www.pdf995.com/samples/pdf.pdf");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory() + "/schematisktscheman/schemainfo.pdf")));
编辑:我在主线程上运行了网络代码,这引发了异常。现在为下载创建一个新线程,它获取示例PDF(http://www.pdf995.com/samples/pdf.pdf)并将其内容放在文件中。
感谢@greenapps!
答案 0 :(得分:1)
首先,替换:
f.close();
使用:
f.flush();
f.getFD().sync();
f.close();
这可确保在继续之前将所有内容写入磁盘。
然后,您需要使用MediaScannerConnection
和scanFile()
让MediaStore
了解更新后的文件。
答案 1 :(得分:0)
我在主线程上运行了网络代码,引发了异常。现在为下载创建一个新线程,它获取示例PDF(http://www.pdf995.com/samples/pdf.pdf)并将其内容放在文件中。
{{1}}