Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/08/2008, 05:00
Belzebu
 
Fecha de Ingreso: enero-2007
Mensajes: 78
Antigüedad: 19 años, 9 meses
Puntos: 0
Problema función lectura links

Buenas, estoy intentando hacer un programa que coja todas los links "internos" que contenga una web www.elpais.es..., por ejemplo. El caso es que lo tengo hecho para que extraiga los links de una web determinada. Pero ahora me toca implementarlo de manera recursiva. El caso es que el mismo programa metido en una función que retorne la lista de links de una web en concreta falla(a pesar de que compila bien), mientras que si lo lanzo dentro del main lo hace perfectamente.

Es la primera vez que uso java asi que no se cual puede ser el error.

Código PHP:
import java.io.*;
import java.net.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.util.*;
import java.lang.String;
import java.util.List;
import java.lang.Object;
import java.io.FileWriter;
import java.lang.String;


class 
GetLinks {

    public static 
void main(String[] args) {
            
         List <
String> NodosV = new ArrayList <String>();
        
String semillas = args[0];
                
String NextURL;
        
String webs = args[1];
                
                try{
                    
FileWriter links = new FileWriter("Link.txt",true);
                    
NodosV = CojerLinks(semillas, webs);

                    while (
NodosV.isEmpty()==false){
            
NextURL = NodosV.get(0);
            
NodosV.remove(0);
            
links.write(NextURL);                
                    }                
                }
                catch (
Exception e) {
            
e.printStackTrace();
        }
        }
    
    static List 
CojerLinks (String semilla, String web){

        
EditorKit kit = new HTMLEditorKit();
        
Document doc = kit.createDefaultDocument();
        
//List NodosN = new ArrayList<String>();
        //NodosV<String> list = new ArrayList<String>();
                
              
List <String> NodosV = new ArrayList <String>();
                List <
String> NodosN = new ArrayList <String>();
                
        
String URL;
        
String NextURL;

        
// La clase documento no maneja todavia apropiadamente los caracteres.
        
doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
        try {
            
// Creamos un Reader de contenido HTML
        
            
Reader rd = getReader(semilla);
        
            
// Parsea el HTML
            
kit.read(rd, doc, 0);
    
            
// Nos movemos atraves de los elementos del documento HTML
            
ElementIterator it = new ElementIterator(doc);
            
javax.swing.text.Element elem;
            while ((
elem = it.next()) != null) {
                
SimpleAttributeSet s = (SimpleAttributeSet)
                
elem.getAttributes().getAttribute(HTML.Tag.A);
                if (
s != null) {
                        
URL=s.getAttribute(HTML.Attribute.HREF).toString();
                                    if (
URL.contains(web)){
                                            
NodosN.add(URL);
                    }        
                    else {
                        if (
URL.contains("www.")==false &&  URL.length()>5){
                            
NodosN.add("http://"+web+URL);
                            
//System.out.println("http://"+semilla+URL);
                        
}    
                    }            
                }
            }
        } 
        catch (
Exception e) {
            
e.printStackTrace();
        }
        
//Iterator iter = NodosN.iterator();
        //while (iter.hasNext())
        //      System.out.println(iter.next());
        
while (NodosN.isEmpty()==false){
                
NextURL = NodosN.get(0);
                
NodosN.remove(0);
                
//System.out.println(NextURL);
                
if(NodosV.contains(NextURL)==false){
                    
NodosV.add(NextURL);
                }
        }
        return 
NodosV;

        
//System.exit(1);
    
}
    
// Retornamos un Reador de los datos HTML. Si 'uri' comienza con 'http:'
    // entonces se trata como una URL; de otra forma se asume que es un fichero local
    
static Reader getReader(String uri) throws IOException {
    if (
uri.startsWith("http:")) {
        
// Recuperamos de Internet
        
URLConnection conn = new URL(uri).openConnection();
        return new 
InputStreamReader(conn.getInputStream());
        } 
        else {
            
// Recuperamos de fichero local
            
return new FileReader(uri);
        }
    }
} 
Gracias por adelantado