下载代码
public void download3(String a,String d){ String s1 = "http://58.177.123.82:9080"+a; InputStream is = null; //定义一个输入流。 BufferedInputStream bis = null;//定义一个带缓冲的输入流 。 try{ URL url = new URL(s1);//创建一个URL对象。 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); System.out.println(); conn.setDoInput(true); conn.connect(); is = conn.getInputStream();//打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。 bis = new BufferedInputStream(is); }catch(Exception e){ System.out.println(e.toString()); } //写到本地 BufferedOutputStream bos = null; //定义一个带缓冲的输出流。 File file = new File("/sdcard/"+d); System.out.println(file.exists()); if (file.exists()){ Toast.makeText(Reader5.this, "sorry! the file is exists", Toast.LENGTH_LONG).show(); } else{ try{ bos = new BufferedOutputStream(new FileOutputStream(file));; int num = -1; byte[] buffer = new byte[1024]; while (true) { num = bis.read(buffer); if (num == -1) { bos.flush(); break; } bos.write(buffer, 0, num); bos.flush(); } bos.close(); bis.close(); bos = null; bis = null; if( file.exists()){ Toast.makeText(Reader5.this, "download success!", Toast.LENGTH_LONG).show(); } }catch(Exception e){ } } } 这段代码是Java实现的一个简单的HTTP文件下载功能,主要涉及到网络编程和文件操作。下面将详细解释其中的关键知识点: 1. **URL与HttpURLConnection**: - `URL`(Uniform Resource Locator)类是Java中用于表示统一资源定位符的类,它提供了访问网络资源的方法。在代码中,通过构造函数`new URL(s1)`创建了一个URL对象,`s1`是文件的网络地址。 - `HttpURLConnection` 是Java中的一个抽象类,它是`URLConnection`的子类,用于处理HTTP协议。在这里,通过`url.openConnection()`创建了一个`HttpURLConnection`实例`conn`。 2. **设置请求属性**: - `conn.setDoInput(true)` 设置允许从服务器获取数据,这对于下载文件是必要的。 - `conn.connect()` 连接到指定的URL,开启与服务器的通信。 3. **获取输入流并进行缓冲**: - `conn.getInputStream()` 获取从服务器到本地的输入流,用于读取服务器返回的数据。 - `BufferedInputStream bis = new BufferedInputStream(is)` 创建一个带缓冲的输入流,提高数据读取效率。 4. **文件操作**: - `File file = new File("/sdcard/" + d)` 创建一个`File`对象,表示要保存的本地文件路径。这里假设文件保存在SD卡上。 - `file.exists()` 检查文件是否已存在。如果存在,会显示提示信息。 5. **文件写入**: - `BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))` 创建一个带缓冲的输出流,用于向文件写入数据。 - 使用`while`循环从`bis`读取数据到缓冲区`buffer`,然后通过`bos.write(buffer, 0, num)`将缓冲区内容写入文件。当`bis.read(buffer)`返回-1时,表示文件结束,调用`bos.flush()`清空缓冲区并结束写入。 - 关闭流并释放资源,同时检查文件是否存在,如果存在则显示下载成功的提示。 6. **异常处理**: - 在整个过程中,代码使用了`try-catch`语句来捕获可能出现的异常,如网络问题、文件操作错误等。捕获到异常时,会打印异常信息,但没有进行具体的错误处理。 这段代码实现了从指定的URL下载文件并保存到本地的功能,使用了HTTP连接、输入/输出流以及缓冲技术。在实际应用中,可能还需要添加更多的异常处理和错误反馈机制,以及对网络状态的检查。