代码如下:package cn.mypic; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.ne
【知识点详解】
在Android开发中,有时候我们需要从网页中抓取信息,比如图片或文本内容。这个实例代码展示了如何封装一个简单的功能,用于从指定的网页URL中抓取并下载图片。下面我们将详细分析这段代码及其涉及的关键知识点。
1. **URL类**:在Java中,`java.net.URL`类用于表示统一资源定位符,即我们常说的网址。通过构造函数`new URL(httpUrl)`,我们可以创建一个URL对象,用来与指定的网页建立连接。
2. **BufferedInputStream和FileOutputStream**:这两个是Java I/O流中的关键类。`BufferedInputStream`提高了读取输入流的效率,而`FileOutputStream`用于向文件写入数据。在这个例子中,它们用于从网络读取图片数据并将其写入到本地文件系统。
3. **文件操作**:代码中使用`File`类创建和管理文件。`FileNumber`是一个自定义类,用于处理图片文件的序号(可能是为了确保每个图片文件的唯一性)。`NumberReadFromFile()`和`NumberWriteToFile()`是这个类中的方法,分别用于读取和写入当前图片的序号。
4. **异常处理**:在进行网络操作时,异常处理是非常重要的。代码中使用了try-catch块来捕获可能出现的`MalformedURLException`, `FileNotFoundException`, 和 `IOException`,并打印堆栈跟踪信息,以便于调试和问题定位。
5. **字符串操作**:在获取图片文件名时,使用了`substring()`方法来截取URL中的图片文件后缀,以及`lastIndexOf()`来找到“.”的位置,从而获取文件名。同时,用`concat()`方法将序号和后缀拼接成完整的文件名。
6. **IO流的读写**:在读取网络流和写入文件时,使用了循环来逐个字节地处理数据。`in.read()`读取一个字节,如果未达到流的末尾(返回值不等于-1),则调用`file.write(t)`将字节写入文件。
7. **网络连接与流的关闭**:在完成文件写入后,使用`file.close()`和`in.close()`关闭文件流,释放系统资源。
8. **网页内容获取**:代码中还提供了一个`getHtmlCode()`方法,用于获取网页的HTML源码。它使用`BufferedReader`从URL的输入流中读取内容,这在解析网页内容、提取特定信息时非常有用。
总结,这段代码实现了从给定的网页URL抓取图片并保存到本地的功能,同时也提供了获取网页HTML源码的方法。在实际应用中,这样的功能可能需要进一步封装和优化,例如加入多线程下载、错误重试机制、更复杂的文件命名策略,或者使用第三方库如Jsoup来解析HTML内容。