用多线程读取目录中所有html文件内容,求修正代码

乖乖站好 发布于 2012/04/16 18:34
阅读 690
收藏 0

public class AllThread extends Thread {

    public String content = "";
    public String url = "";

    public void run() {
        System.out.println(url);
        content = getContents(url);
    }

    public AllThread(String the_url) {
        url = the_url;
    }

    private static String getContents(String urlName) {
        try {
            StringBuffer sb = new StringBuffer();

            URL url = new URL(urlName);
            URLConnection u = url.openConnection();
            InputStream is = u.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "gbk");
            int c;
            while ((c = isr.read()) != -1) {
                sb.append((char) c);
            }
            is.close();
            isr.close();
            return sb.toString();
        } catch (IOException ex) {
            return ex.getMessage();
        }
    }

    public static void main(String args[]) {
        //TODO自动生成方法存根
        //String[] dir = {"http://www.baidu.com ", "http://www.yisou.com ", "http://www.163.com","http://www.duote.com"};
        File[] dir = new File("//192.168.18.232/heritrix/www.duote.com/softin").listFiles();//提取softin中所有的html文件
        AllThread[] threads = new AllThread[dir.length];

        //循环输出文件名
        for (int i = 0; i < dir.length; i++) {
            threads[i] = new AllThread(dir[i].getName());
            threads[i].start();
        }


        //循环输出文件内容
        for (int i = 0; i < dir.length; i++) {
            try {
                threads[i].join();
            } catch (InterruptedException e) {
                //   TODO   自动生成   catch   块 
                e.printStackTrace();
            }

            System.out.println(threads[i].content);

        }
    }
}


输出结果:
31283.html
3108.html
53809.html
22770.html
42448.html
11075.html
22426.html
no protocol: 2253.html
no protocol: 19455.html
no protocol: 26932.html
no protocol: 21136.html
…………………………(读取文件名成功,读取内容却失败了TwT)
加载中
0
乖乖站好
乖乖站好

  //String[] dir = {"http://www.baidu.com ", "http://www.yisou.com ","http://www.163.com","http://www.duote.com"};这一句是被注释掉了的

0
乖乖站好
乖乖站好
呜……没有人呀
0
Jeky
Jeky

URL url = new URL(urlName)的时候,必须指明协议,否则抛出java.net.MalformedURLException异常

你那个no protocol就是这个异常的信息

乖乖站好
乖乖站好
该如何指明协议呢?
0
Jeky
Jeky

引用来自“Jeky”的答案

URL url = new URL(urlName)的时候,必须指明协议,否则抛出java.net.MalformedURLException异常

你那个no protocol就是这个异常的信息

你如果是访问一个文件,协议就是file:/+文件路径,要是网址就是http:/

这里的文件路径得是全路径,不能是相对路径。

其实你既然已经获得了File,可以使用File.toURI.toURL()来获取文件的URL,不用新建

乖乖站好
乖乖站好
少侠 多谢了 >V<
返回顶部
顶部