import java.util.*;
import java.io.*;
import java.io.File;
import java.net.*;
/**
*该程序用于从网上下载一个文件到本机,可以用参数列 http://www.sohu.com/ sohu.htm 和 *http://images.sohu.com/uiue/sohu_logo/beijing2008/sohu.gif sohu.gif进行试验
*/public class URLReader
{  
    private static final int BUFFER_LENGTH=65536;
   
    public static void main(String args[]) throws Exception{
        URL remote;       
        remote=new URL(args[0]);        //向控制台输出一些连结的信息
        URLConnection conn=remote.openConnection();
        System.out.println("Length: "+conn.getContentLength());
        System.out.println("Connection Type: "+conn.getContentType());
        System.out.println("Changed: "+new Date(conn.getLastModified()));        //建立输入流
        InputStream stream=remote.openStream();    
        InputStream inStream=conn.getInputStream();
        int connectLength=conn.getContentLength();
        
         //建立随机访问文件   
        String fileName=args[1]; 
        RandomAccessFile file=new RandomAccessFile(fileName,"rw");        //缓冲
        byte[] buffer=new byte[BUFFER_LENGTH];          //如果文件大小比缓冲小,就把缓冲里的byte一次写入文件
        if(connectLength<=BUFFER_LENGTH){
            file.write(buffer,0,connectLength);
        }
        //否则多写几次,直到全部写进文件
        else{
            int contentSize=0;
            int position=0;
            while((contentSize=inStream.read(buffer))==BUFFER_LENGTH){
                file.write(buffer,position,BUFFER_LENGTH);
                position+=BUFFER_LENGTH;
            }
            file.write(buffer,position,contentSize);
        }        //关闭文件和输入流
        file.close();
        inStream.close();
    }
    
    
       
}/*存在的问题是下载下来的文件,网页似乎可以打开,但是图片文件打不开(或者打开看不到图像),但是文件大小是对的。不知道这是为什么啊!!各位帮忙分析一下了,小弟百思不得其解啊.用FilterOutPutStream类试过,存在同样的问题.超级感谢大家了*/ 

解决方案 »

  1.   

    下载的是该页面文件的html代码文件
    当然没有图片啊
      

  2.   

    你可以用IE将一个页面“另存为”到你的计算机
    存储的不止html文件吧,还有个大大的文件夹呢
    图片就在那里
      

  3.   

    Image getImage(URL u);
    Image getImage(URL u,String s);
    获取指定URL处的图像.
      

  4.   

    html文件里面不包含图片,只包含相应的链接
    如果是绝对url,那么本地还是可以看到
    但是如果是相对url的话就看不到了,如果你想要保存图片的话,就要编程把这些图片也取回来,并且放到相应的目录下面
      

  5.   

    首先,十分感谢楼上的各位哥哥们。但是我没有把问题说清楚,所以大家理解错了,我不是说的下载下的html页面上的图片看不到,而是想说下载的图片文件打不开(或者是打开了看不到图像)。下载到本地的html文件里的图片链接如果是相对地址,没有图像那是必需的。程序的第一个参数是URL,第2个参数是下载到本机的文件名。我想问的是我直接下载一个图像文件,为什么文件大小是正确的,但是却无法打开呢?应该说下载到本地的文件肯定和网上的文件不一样了。我想知道为什么我下载下来的文件会不一样啊。jayfantsy哥哥的方法很好,但是我想图片文件也是一个文件,这个程序最好应该能对任何了类型的文件都适用吧,所以不想用各getImage()。有没有更好的解决方法,能够下载指定URL处的任意文件?还是请大家帮我分析一下啦。小弟以前都是用Delphi的,现在初学java,水平实在是矬啊。谢谢大家了。
      

  6.   

    楼上的哥哥,我可以悄悄的哭一下吗?我想说的是跟网页没什么关系了。我写htm文件只是为了举个例子而已。这个程序不是用来下载网页的,而是可以下载指定url处的任意文件的。存在的问题是下载下来的图片文件看不了。谢谢大家帮忙了,继续等待
      

  7.   

    package mypack;import java.util.*;
    import java.io.*;
    import java.net.*;public class URLReader
    {  
        private static final int BUFFER_LENGTH=7096;
       
        public static void main(String args[]) throws Exception{
            URL remote;       
            remote=new URL("http://www.baidu.com/img/logo.gif");        URLConnection conn=remote.openConnection();
            System.out.println("Length: "+conn.getContentLength());
            System.out.println("Connection Type: "+conn.getContentType());
            System.out.println("Changed: "+new Date(conn.getLastModified()));
     
            InputStream inStream=conn.getInputStream();
             
            String fileName="c:/logo.gif"; 
            RandomAccessFile file=new RandomAccessFile(fileName,"rw");        byte[] buffer=new byte[BUFFER_LENGTH];              int contentSize=0;
                int position=0;
                while((contentSize=inStream.read(buffer)) != -1){
                    file.write(buffer,position,contentSize);
                    position+=contentSize;
                }        file.close();
            inStream.close();
        }}