public void downloadFile(String URL, String fileName)
throws Exception {
InputStream is = null;
try {
// 创建、打开连接
URL myUrl = new URL(URL);
URLConnection connection = myUrl.openConnection();
connection.connect();
// 得到访问内容并保存在输入流中。
is = connection.getInputStream();
// 得到文件的总长度。注意这里有可能因得不到文件大小而抛出异常
int len = connection.getContentLength();
Log.e("down", String.valueOf(len));
Log.e("fileName", fileName);
if (is != null) {
File file = new File(SD_PATH + fileName);
// 如果文件存在,则删除该文件。
if (file.exists()) {
file.delete();
Log.e("down", "已删除文件");
}
RandomAccessFile randomAccessFile = new RandomAccessFile(
SD_PATH + fileName, "rw");
byte[] buffer = new byte[4096];
int length = -1;
while ((length = is.read(buffer)) != -1) {
randomAccessFile.write(buffer, 0, length);
nowSize+=length;
Log.e("down", "正在下载。。。。" + (nowSize));
}
is.close();
randomAccessFile.close();
}
} catch (Exception e) {
Log.e("down", e.toString());
} finally {
}
Debug调试了一下,到RandomAccessFile randomAccessFile = new RandomAccessFile(SD_PATH + fileName, "rw");的时候,跳到catch了,到底是什么问题啊。。
Logcat错误信息是,catch中打印了java.io.FileNotFoundException: /sdcard/DBMarket/TogicVideo_V2_5_release_togic_ZNDS.apk: open failed: ENOENT (No such file or directory)
------解决方案--------------------
/sdcard/DBMarket/ 这个路径存在吗?使用Java IO写文件时会自动创建文件,但是如果路径都不存在的话就会报异常的,需要自己手动创建这个路径。即:
File p = new File(filePath);
if (!p.exists()) {
p.mkdirs();
}
另外,创建路径的时候后面最好不要加 / ,然后创建IO流的时候使用 filePath + File.separator + fileName