我已经从pdf
编写了此代码以供下载url
,文件url
就是这样 -
String fileURL= "http://www.vivekananda.net/PDFBooks/History_of_India.pdf";
代码
public static void DownloadFile(String fileURL, File directory) {
try {
FileOutputStream f = new FileOutputStream(directory);
URL u = new URL(fileURL);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.getResponseCode();
c.connect();
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = in.read(buffer)) > 0) {
f.write(buffer, 0, len1);
}
f.close();
} catch (Exception e) {
e.printStackTrace();
}
}
但这显示文件未找到异常,响应代码为405.我不知道为什么会这样。请帮助.. !!
这是我在SD卡中创建文件的代码 -
代码
public void createPdfFile(){
String extStorageDirectory = Environment.getExternalStorageDirectory()
.toString();
File folder = new File(extStorageDirectory, "pdf");
folder.mkdir();
file = new File(folder, "storrage_data.pdf");
try {
file.createNewFile();
} catch (IOException e1) {
e1.printStackTrace();
}
}`
在此之后我从onResume()调用这样的线程中的下载方法;因为onCreate它会给出错误" Network On Main Thread"。我错了,现在我不知道:(
代码
public void downloadFile(){
new Thread(new Runnable() {
@Override
public void run() {
Downloader.DownloadFile(url, file);
showPdf();
}
}).start();
}
答案 0 :(得分:1)
可能的原因是您不想存在的文件夹。首先检查它是否存在。如果没有,请创建它。然后创建fileoutputstream并写入它。
答案 1 :(得分:0)
您的代码是正确的。现在,您需要将pdf文件下载到外部存储器或您要下载并保存的位置。
答案 2 :(得分:0)
删除此代码,然后重试。
//c.setRequestMethod("GET");
//c.setDoOutput(true);
//c.getResponseCode();
//c.connect();
我认为URL.openConnection()
已经说明了连接,因此c.connect()
不是必需的。
答案 3 :(得分:0)
我建议你使用DownloadManager。下载过程中可能会出现太多问题,无法自行处理所有问题。想想在下载过程中暂时失去连接性...... 下面是我从我的应用程序中提取的一些代码,并稍作修改,以摆脱您不需要的部分。
public void downloadAndOpenPdf(String url,final File file) {
if(!file.isFile()) {
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request req = new DownloadManager.Request(Uri.parse(url));
req.setDestinationUri(Uri.fromFile(file));
req.setTitle("Some title");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(this);
if (file.exists()) {
openPdfDocument(file);
}
}
};
registerReceiver(receiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
dm.enqueue(req);
Toast.makeText(this, "Download started", Toast.LENGTH_SHORT).show();
}
else {
openPdfDocument(file);
}
}
public boolean openPdfDocument(File file) {
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(file), "application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
try {
startActivity(target);
return true;
} catch (ActivityNotFoundException e) {
Toast.makeText(this,"No PDF reader found",Toast.LENGTH_LONG).show();
return false;
}
}