// 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/taoyong2008/archive/2008/08/21/2805712.aspx
/**
*
*/
/**
* 文件名称:downLoadFile.java
*
*
* 修改历史:
*/
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Vector;
import javax.imageio.ImageIO;
/**
* 下载网络的图片
* 使用方法:
* 1: setDir(下载后放置的目录);savetofile(下载的目标网址)
* 2:savetofile(下载的网址, 要存取的文件的绝对路径)
*
* 注意事项:当文件的大小超过buffer_size*max_buffers时会自动放弃下载,并返回false
* 文件名称:DownFile.java
*
*/
public class DownFile
{
private static int buffer_size = 8096;// 缓冲区大小
private static int max_buffers = 20;
public static String DIR="d://";
public static void setDir(String dirString)
{
DIR=dirString;
}
/**
* 文件的大小超过buffer_size*max_buffers时会自动放弃下载,并返回false
* 使用方法:
* 1: setDir(下载后放置的目录);savetofile(下载的目标网址)
* @param desturl
* @return
*/
public static boolean savetofile(String desturl)
{
return savetofile(desturl,getFileName(desturl));
}
/**
* 调用savetofile(String desturl)时会使用的文件的绝对路径
* 它会放置在DIR下面,文件名为网址的最后一个/或/后找到的文件名
* 如果找不到//,那么就设置为unnamed
* @param desturl
* @return
*/
public static String getFileName(String desturl)
{
int pos=desturl.lastIndexOf("/");
int pos2=desturl.lastIndexOf("//");
if(pos==-1)
{
pos=pos2;
}
else if(pos<pos2)
pos=pos2;
String filename;
try {
filename=desturl.substring(pos+1);
} catch (Exception e) {
filename="unnamed.jpg";
}
return DIR+filename;
}
/**
* 文件的大小超过buffer_size*max_buffers时会自动放弃下载,并返回false
* @param desturl
* 目标网址
* @param filename
* 存取的文件名(绝对路径)
* @return
*/
public static boolean savetofile(String desturl, String filename) {
FileOutputStream fos = null;
BufferedInputStream bis = null;
HttpURLConnection httpurl = null;
URL url = null;
byte[] buf = new byte[buffer_size];
int size = 0;
try {
// 建立链接
url = new URL(desturl);
httpurl = (HttpURLConnection) url.openConnection();
// 连接指定的资源
httpurl.connect();
// 获取网络输入流
bis = new BufferedInputStream(httpurl.getInputStream());
// 建立文件
fos = new FileOutputStream(filename);
Func.cout("正在获取链接[" + desturl + "]的内容.../n将其保存为文件[" + filename + "]");
// 保存文件
/**
* 真实的filesize为 filesize*buffer_size
*/
int fileSize=0;
while ((size = bis.read(buf)) != -1 && fileSize<max_buffers)
{
fos.write(buf, 0, size);
fileSize++;
}
fos.close();
bis.close();
httpurl.disconnect();
if(fileSize<max_buffers)
Func.cout("下载成功!");
else {
System.out.println("exceed max size, aborted!");
return false;
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}
public static void main(String[] args) throws IOException {
String url = "http://www.engineeringvillage2.com.cn/engresources/images//ev2logo5.gif";
try {// 下载存盘
DownFile.savetofile(url);
} catch (Exception e) {
Func.cout(e.getMessage());
Func.cout("资源[" + url + "]下载失败!!!");
}
// convertTo("D:/test.html");
String html = null;
try {// 将下载的文件读入html
FileInputStream fis = new FileInputStream("D:/test.pg");
int size = fis.available();
byte b[] = new byte[size];
if (fis.read(b, 0, size) > 0) {
html = new String(b);
}
} catch (Exception e) {
Func.cout(e.getMessage());
Func.cout("资源[" + "D:/test.html" + "]读取失败!!!");
}
System.out.println(html);
}
private static class outs {
public void cout(String s) {
System.out.println(s);
}
}
private static final outs Func = new outs();
/*public static void convertTo(String path) {
try {
BufferedImage image = ImageIO.read(new FileInputStream(path));
for (int i = 0; i < image.getWidth(); ++i) {
for (int j = 0; j < image.getHeight(); ++j) {
int rgb = image.getRGB(i, j);
int red = (rgb >> 16) & 0xff;
int green = (rgb >> 8) & 0xff;
int blue = (rgb) & 0xff;
int sum = red + blue + green;
sum /= 3;
rgb = rgb & (~0xffffff);
rgb = rgb | (sum << 16);
rgb = rgb | (sum << 8);
rgb = rgb | (sum);
image.setRGB(i, j, rgb);
}
}
ImageIO.write(image, "jpg", new File(path));
} catch (Exception e) {
// TODO: handle exception
}
}
public static int getRGB(int red, int green, int blue) {
int rgb = 0;
rgb |= blue;
rgb |= (green << 8);
rgb |= (red << 16);
return rgb;
}*/
}