• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

belini

[Resolvido]Abrir Um Ficheiro numa Janela?

19 mensagens neste tópico

Boas ,

eu estou a desenvolver um interface em java, mas tenho pouco pratica em java. O que eu preciso neste interface é abrir um ficheiro, não ler esse ficheiro. Isto é eu quero que o interface abra esse ficheiro como se abre um documento num editor de texto em que este mostra o conteudo do ficheiro no próprio interface. Alguem me pode ajudar? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

que tipo de interface é?humm nao faço ideia.. :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estas a desenvolver que tipo de interface? AWT/Swing/SWT???? Queres ler sempre do mesmo ficheiro ou queres que que o utilizador possa escolher o ficheiro a ser lido?

Nao percebi o que querias...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas tou a fazer um interface swing embora o ke eu keria era desenvolver uma apliacação para abrir um layout de uma pagina escrita em html e php, mas acho que isso é um passo á frente. Sim eu quero que o utilizador escolha o ficheiro que quer abrir.Isto é eu estou a usar um Filechooser e depois queria abrir esse ficheiro no jform que tenho . è isso que não consigo fazer. Tenho visto tutoriais mas não consigo descobrir como isso se faz . Espero ter esclarecido e obrigado pela atenção.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assumndo que ja tens o Filechooser feito e a funcionar a tua preocupacao seguinte e criares um event listener para os botoes.

O codigo seguinte mostra como fazer dispara um evento com os botoes openButton e saveButton (ou outros quaisquer que tenhas definido no filechooser)

 public void actionPerformed(ActionEvent e) {

        //Handle open button action.
        if (e.getSource() == openButton) {
            int returnVal = fc.showOpenDialog(FileChooserDemo.this);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                //This is where a real application would open the file.
                log.append("Opening: " + file.getName() + "." + newline);
            } else {
                log.append("Open command cancelled by user." + newline);
            }
            log.setCaretPosition(log.getDocument().getLength());

        //Handle save button action.
        } else if (e.getSource() == saveButton) {
            int returnVal = fc.showSaveDialog(FileChooserDemo.this);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                //This is where a real application would save the file.
                log.append("Saving: " + file.getName() + "." + newline);
            } else {
                log.append("Save command cancelled by user." + newline);
            }
            log.setCaretPosition(log.getDocument().getLength());
        }
    }

depois onde diz:  //This is where a real application would open the file.

podes usar um metodo kk para ler ficheiros (exemplo segue linha a linha e fazer o append na textbox) e em que a TextBox se chama textBox

BufferedReader br = new BufferedReader(new FileReader(file));

String line = "";

while ((line = br.readLine()) != null){

  String text = textBox.getText();

  text += line;

  textBox.setText(text);

}

br.close();

Isto esta em mais ou menos pseudo-codigo porque nao esta testado nem tenho a certeza de como se chamam os objecto em swing (eu quase so uso SWT) e serve para fazer sempre append ao que ja esta na TextBox (se kiseres que a limpe e ligeiramente diferente mas da para perceber)

Se depois tiveres numa de fazer parse ao codigo HTML para so mostrar o que tu pertendes (tipo um determinado text numa form) podes usar o java.util.regex que e facil e muito util, posso-te dar exemplos disso se precisares.

Boa sorte!

EDIT: Como deve dar para perceber o codigo do event handler nao e meu, procura por este codigo e outo em:

http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/FileChooserDemo.java

http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado dabubble . Eu já tinha os botões a funcionar o que precisava mesmo era do metodo para ler os ficheiros muito obrigado pela explicação. Por acaso tinha ido buscar esse exemplo não percebo muito bem é o metodo dos ficheiros. Eu li que o IOSTREAM apenas lia o ficheiro byte a byte . Agora tenho de saber lidar com o parser.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

buffered reader e uma abstraccao sobre IOSTREAM, que nao precisa de buffers e le uma linha de cada vez.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado dabubble . Eu já tinha os botões a funcionar o que precisava mesmo era do metodo para ler os ficheiros muito obrigado pela explicação. Por acaso tinha ido buscar esse exemplo não percebo muito bem é o metodo dos ficheiros. Eu li que o IOSTREAM apenas lia o ficheiro byte a byte . Agora tenho de saber lidar com o parser.

aah e tal eu quero ver tudo!! posta o codigo se faz favor...  ;) isso tem a ver com applets..nao é?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) isso tem a ver com applets..nao é?

nao isto e swing que e uma lib grafica de Java, applets é AWT. A diferença e que swing e stand-alone e AWT precisa de um browser ou de outro container. Para alem disso Swing e mais poderoso, melhor, em Java so mesmo SWT.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado dabubble . Eu já tinha os botões a funcionar o que precisava mesmo era do metodo para ler os ficheiros muito obrigado pela explicação. Por acaso tinha ido buscar esse exemplo não percebo muito bem é o metodo dos ficheiros. Eu li que o IOSTREAM apenas lia o ficheiro byte a byte . Agora tenho de saber lidar com o parser.

aah e tal eu quero ver tudo!! posta o codigo se faz favor...  ;) isso tem a ver com applets..nao é?

Aqui vai o codigo que tenho até agora!

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;


public class open extends JPanel
                             implements ActionListener {
    static private final String newline = "\n";
    JButton openButton, saveButton;
    JTextArea log;
    JFileChooser fc;
    
    
    
     public open() {
        super(new BorderLayout());
       
        
        //Create the log first, because the action listeners
        //need to refer to it.
        log = new JTextArea(20,20);
        log.setMargin(new Insets(5,5,5,5));
        log.setEditable(true);
        JScrollPane logScrollPane = new JScrollPane(log);

        //Create a file chooser
        fc = new JFileChooser();

       
        
        //Uncomment one of the following lines to try a different
        //file selection mode.  The first allows just directories
        //to be selected (and, at least in the Java look and feel,
        //shown).  The second allows both files and directories
        //to be selected.  If you leave these lines commented out,
        //then the default mode (FILES_ONLY) will be used.
        //
        //fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        //fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

        //Create the open button.  We use the image from the JLF
        //Graphics Repository (but we extracted it from the jar).
        
        
        openButton = new JButton("Open a File...",
                                 createImageIcon("Open16.gif"));
        openButton.addActionListener(this);

        //Create the save button.  We use the image from the JLF
        //Graphics Repository (but we extracted it from the jar).
        saveButton = new JButton("Save a File...",
                                 createImageIcon("Save16.gif"));
        saveButton.addActionListener(this);

        
        //For layout purposes, put the buttons in a separate panel
        JPanel buttonPanel = new JPanel(); //use FlowLayout
        buttonPanel.add(openButton);
        buttonPanel.add(saveButton);

        //Add the buttons and the log to this panel.
        
        
        add(buttonPanel, BorderLayout.PAGE_START);
        add(logScrollPane, BorderLayout.CENTER);
        
        
        
        
    }

    public void actionPerformed(ActionEvent e) {

        //Handle open button action.
        if (e.getSource() == openButton) {
            int returnVal = fc.showOpenDialog(open.this);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                //This is where a real application would open the file.
               
                try  {
                File inputFile = new File(file.getName());
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    String line = "";
                     
                    while ((line = br.readLine()) != null){
                   String text = log.getText();
                   text += line;
                   log.setText(text);
                }
                br.close();
                } catch (Exception t){log.append("Not Opening: ");}
    

            } else {
                log.append("Open command cancelled by user." + newline);
            }
            log.setCaretPosition(log.getDocument().getLength());

        //Handle save button action.
        } else if (e.getSource() == saveButton) {
            int returnVal = fc.showSaveDialog(open.this);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                File file = fc.getSelectedFile();
                //This is where a real application would save the file.
                try  {
                        String text=log.getText();
                        BufferedWriter out = new BufferedWriter(new FileWriter(file));
                        out.write(text);    
                        out.close();
                 }catch (Exception t){log.append("Not Opening: ");}
            } else {
                log.append("Save command cancelled by user." + newline);
            }
            log.setCaretPosition(log.getDocument().getLength());
        }
    }

    /** Returns an ImageIcon, or null if the path was invalid. */
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = open.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private  static void createAndShowGUI() {
        //Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);

        //Create and set up the window.
        JFrame frame = new JFrame("open");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        JComponent newContentPane = new open();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        
        
        
        
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}



0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi Dabubble Já agora podias mandar os exemplos de como fazer o parse para html ? Tenho que mudar a textBox para outro objecto ou vou interpretar como texto ? isto é é possivel apresentar a pagina html tal como a vemos num browser ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epah desaconselho-te a reinventares um browser (que era que terias de faze para fazerres o que querias), mais vale usares uma lib que ja faça isso. Deve haver entre as libs de swing uma que ja faça interpretação de HTML, mas nao tenho a certeza (sei que pelo menos em SWT ha). O parse que eu te tinha falado anteriormente era so para ires buscar determinadas propriedades da pagina  (tipo o titulo ou algum campo) pelo que percebi tu queres mesmo que ele abra a pagina html e a mostre como o Firefox ou assim neh? isso ja e muito mais complicado e acho que deves optar por libs ja feitas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas longe de mim querer reinventar o browser o que eu quero é poder fazer o layout de uma pagina e depois fazer o preview no browser . Ouseja poder criar uma pagina a partir de um layout já feito . Para isso tenho que ter um parse que interprete php e html. Eu já trabalhei com o javacc em que tu fazias uma gramatica . Ontem descobri que essa gramatica em javacc para php e para html já está feita . Agora preciso é de uma maneira para usar essa gramatica ja feita no meu programa . Se te lembrares de como ligar um ficheiro do javacc ao meu prog. Acho que existe um método da textArea que dá pra liguar um ficheiro, acho que é o metodo in ou o out não sei bem .  :eek:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epah eu tb dei javacc... lol. (sera que estudamos no mm sitio :)) mas nao faço ideia de como e se isso sera possivel. Se eu percebi bem o que tu queres e ter uma pagina ja feita em html, tipo um template. e depois preencheres esse template em java (determinados campos). Se a pagina for bem conhacida (se foste tu que fizeste o template ou se for sempre o mesmo ou pelo tu conheces bem todos os formatos que ele pode assumir) podes usar o java util regex que e bue de simples.

Ainda nao percebi bem o que queres mas se cai naquilo que te perguntei avisa que tenho bons exemplos disso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Loool Eu estudo na Universidade do Algarve não sei se foi ai que estudaste  :biggrin: Mas é isso mesmo que eu quero . quero usar templates de paginas feitas por mim no entanto que me permitam fazer modificações pelo menos algumas. Então arranja-me lá esses exemplos pq sinceramente não quero ter que fazer com o parser se houver uma maneira mais facil para fazer :hmm:!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu e coimbra :). Olha mando-te um exemplo de uma classe que faz parsing ao html do goole (google scholar) e que dai retira apenas deerminados campos. Nao deve ser mesmo nada dificil mudares o exemplo para o que queres.

Deve ser facil a partir daqui...


package is.scholar.xml;

import is.scholar.lib.Constants;
import is.scholar.lib.Writer;

import java.io.IOException;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;


/**
* Class that processes an HTML page and builds a XML file
* with all the information of an author/investigator, such as
* articles' title, year of publication, number of citations, 
* etc.
*/

public class ScholarXML {

private String thePage = null;
private Element pubElement = null;
private Element paper = null;
private Document myDocument = null;
private Attribute id = null;

/**
 * Constructor that maps an instance of ScholarXML to a single html page
 * @param thePage - the html page
 */
public ScholarXML() {}

/**
 * Setter for the page containing the results of the google search
 * @param thePage
 */
public void setPage(String thePage) {
	this.thePage = thePage;
} 

/**
 * Method that parses the string containing the html and initializes
 * the Document
 * @throws NoPublicationsFoundException 
 * @throws IOException
 */
public void parsePage() throws NoPublicationsFoundException{
	pubElement = new Element("publications",Namespace.getNamespace(Constants.MyNAMESPACE));
	Namespace xsi = Namespace.getNamespace("xsi","http://www.w3.org/2001/XMLSchema-instance");
	pubElement.setAttribute("schemaLocation",Constants.MyNAMESPACE +" publications.xsd", xsi);

	myDocument = new Document();
	myDocument.setRootElement(pubElement);

	this.parseAuthor();	
	this.parseHits();
}

/**
 * Initializates the XML Document and author tag
 *
 */
private void parseAuthor() {
	Pattern titlePattern = Pattern.compile("<title>(.*?) - Google Scholar</title>");
	Matcher theMatcher = titlePattern.matcher(thePage);
	String authorName = null;
	theMatcher.find();
	authorName = theMatcher.group(1);
	Element author = new Element("author",Namespace.getNamespace(Constants.MyNAMESPACE));
	author.addContent(authorName);
	pubElement.addContent(author);
}

/**
 * Method that parses de results in order to get the specified attributes.
 * 
 * @throws NoPublicationsFoundException
 */
private void parseHits() throws NoPublicationsFoundException {
	List spanList = new LinkedList();
	String hit = null;

	// Procura desde que a a tag span abre ate que acaba (<p class=g>)
	Pattern spanPattern = Pattern.compile("(<span class=\"w\">(.*?)</font>  </font>)+?", Pattern.CASE_INSENSITIVE);
	Matcher spanMatcher = spanPattern.matcher(thePage);
	String myString = null;
	while (spanMatcher.find()) {
		myString = spanMatcher.group(2);
		spanList.add(myString);
	}
	if (myString == null) {

		throw new NoPublicationsFoundException();
	} else {	
		int cont=1;
		for (Iterator iter = spanList.iterator(); iter.hasNext() {
			paper = new Element("paper",Namespace.getNamespace(Constants.MyNAMESPACE));	
			id = new Attribute("id",cont+"");
			paper.setAttribute(id);
			pubElement.addContent(paper);

			hit = (String) iter.next();
			// procura os detalhes de cada uma das publicacoes
			parsePublication(hit);
			parseCoAuthors(hit);
			parseDetailInfo(hit);
			//parseExcerpt(hit);
			parseCitations(hit);
			parseLinksToPublication(hit);

			cont++;
		}
	}
}

/**
 * Method that parses the details for each of the publications retreived
 * @param pub - the publication
 */
private void parsePublication(String pub) {		
	String titleStr, docurlStr;

	Pattern hrefPattern = Pattern.compile("(http://(.*?))>(.*?)</a></span>");
	Matcher tagMatcher = hrefPattern.matcher(pub);
	tagMatcher.find();


	try {
		titleStr = tagMatcher.group(3);
	} catch (IllegalStateException e1) {
		titleStr = "unknown tile";
	}

	Element title = new Element("title",Namespace.getNamespace(Constants.MyNAMESPACE));
	title.addContent(titleStr);
	paper.addContent(title);

	Element docurl = new Element("docurl",Namespace.getNamespace(Constants.MyNAMESPACE));
	try {
		docurlStr = (tagMatcher.group(1)).replaceAll("\"","");
		docurl.addContent(docurlStr);
	} catch (IllegalStateException e) {
		docurl.addContent("no doc url");
	}

	paper.addContent(docurl);
}
/**
 * Searches all the authors of a given publication.
 * @param search the publication
 */
private void parseCoAuthors(String search) {
	List otherAuthors = new LinkedList();
	String myString = null;

	Pattern otherAuthorPattern = Pattern.compile("<font color=green>(.*?) - (.*?)</font>");
	Matcher otherAuthorsMatcher = otherAuthorPattern.matcher(search);		

	while (otherAuthorsMatcher.find()) {
		myString = otherAuthorsMatcher.group(1);

		myString = myString.replaceAll("<b>","");
		myString = myString.replaceAll("</b>","");

		otherAuthors.add(myString);
	}
	if (myString == null) {
		//System.out.println("-- Co-Authors not found --");
	} else {
		Element coauthor = null;
		String temp_coauthors, temp_coauthor;
		StringTokenizer coauthorsToken = null;

		for (Iterator iter = otherAuthors.iterator(); iter.hasNext() {
			temp_coauthors = (String) iter.next();
			coauthorsToken = new StringTokenizer(temp_coauthors,",");
			while (coauthorsToken.hasMoreTokens()) {
				coauthor = new Element("coauthor",Namespace.getNamespace(Constants.MyNAMESPACE));
				temp_coauthor = coauthorsToken.nextToken();
				if (temp_coauthor.charAt(0) == ' ')
					temp_coauthor = (String) temp_coauthor.subSequence(1, temp_coauthor.length());

				coauthor.addContent(temp_coauthor);
				paper.addContent(coauthor);
			}
		}
	}
}

/**
 * Searches the number of times that the article has been citated by other investigators.
 * @param search the publication
 */
private void parseCitations(String search) {

	String myString = null;
	Element citations = null;

	Pattern citationPattern = Pattern.compile("<font color=#7777CC>Cited by ([0-9]*)</font></a>");
	Matcher citationMatcher = citationPattern.matcher(search);		

	while (citationMatcher.find()) {
		citations = new Element("citations",Namespace.getNamespace(Constants.MyNAMESPACE));
		myString = citationMatcher.group(1);

		citations.addContent(myString);
		paper.addContent(citations);
	}
//		if (myString == null) 
//			System.out.println("-- No. of citations found --");

}

/**
 * Parses the codified document in search of any of a publishments' location,
 * date, site and excerpt written with a specified pattern.
 * 
 * @param search the publication
 */
private void parseDetailInfo(String search) {
	String tmp = null;
	Element date, location, site, excerpt;

	Pattern LocaldateSiteExcerptPattern = Pattern.compile(" - (.*), ([0-9]{4}) - (.*)</font>  <br>(.*)?<b>([' ']?)...</b>(.*)? <br>");
	Matcher localDateSiteExcerptMatcher = LocaldateSiteExcerptPattern.matcher(search);		

	while (localDateSiteExcerptMatcher.find()) {
		location = new Element("local",Namespace.getNamespace(Constants.MyNAMESPACE));
		tmp = localDateSiteExcerptMatcher.group(1);
		tmp = tmp.replaceAll(", ","");
		location.addContent(tmp);
		paper.addContent(location);

		date = new Element("date",Namespace.getNamespace(Constants.MyNAMESPACE));
		tmp = localDateSiteExcerptMatcher.group(2);
		date.addContent(tmp);
		paper.addContent(date);

		site = new Element("site",Namespace.getNamespace(Constants.MyNAMESPACE));
		tmp = localDateSiteExcerptMatcher.group(3);
		tmp = tmp.replaceAll(" - ","");
		site.addContent(tmp);
		paper.addContent(site);

		excerpt = new Element("excerpt",Namespace.getNamespace(Constants.MyNAMESPACE));
		tmp = localDateSiteExcerptMatcher.group(4);
		tmp = (tmp.replaceAll("<([/]?)b([r]?)>","").concat(" ..."));
		excerpt.addContent(tmp);
		paper.addContent(excerpt);			
	}
	if (tmp == null) {
		//System.out.println("-- No info on location, date, site and excerpt --");
		//System.out.println("-- Changing the regular expression --");

		if (!parseDetailOmittedData(search)) {
			//System.out.println("-- No info on location, site and excerpt --");
			//System.out.println("-- Changing the regular expression --");

			if (!parseDetailOmittedDateLocation(search)) {
				//System.out.println("-- No info on location and date --");
				//System.out.println("-- Changing the regular expression --");
			}

				//System.out.println("-- Found info on site and excerpt --");
			// ... other options
		}

	}
}

/**
 * Parses the codified document in search of any of a publishments' location, 
 * site and excerpt written with a specific pattern.
 * @param search the publication
 * @return <b>true</b> if pattern matches, <b>false</> otherwise
 */
private boolean parseDetailOmittedData(String search) {
//		 date ommited 
	Pattern LocalSiteExcerptPattern = Pattern.compile(" - (.*) - (.*)</font>  <br>(.*)?<b>([' ']?)...</b> <br>");
	Matcher localSiteExcerptMatcher = LocalSiteExcerptPattern.matcher(search);		
	String tmp = null;
	Element location, site, excerpt;

	while (localSiteExcerptMatcher.find()) {
		location = new Element("local",Namespace.getNamespace(Constants.MyNAMESPACE));
		tmp = localSiteExcerptMatcher.group(1);
		tmp = tmp.replaceAll(", ","");
		location.addContent(tmp);
		paper.addContent(location);

		site = new Element("site",Namespace.getNamespace(Constants.MyNAMESPACE));
		tmp = localSiteExcerptMatcher.group(2);
		tmp = tmp.replaceAll(" - ","");
		site.addContent(tmp);
		paper.addContent(site);

		excerpt = new Element("excerpt",Namespace.getNamespace(Constants.MyNAMESPACE));

		tmp = localSiteExcerptMatcher.group(3);
		tmp = (tmp.replaceAll("<([/]?)b([r]?)>","").concat(" ..."));
		excerpt.addContent(tmp);
		paper.addContent(excerpt);
	}
	if (tmp == null)
		return false;

	return true;
}

/**
 * Parses the codified document in search of any of a publishments' location, 
 * date and excerpt written with a specific pattern.
 * @param search the publication
 * @return <b>true</b> if pattern matches, <b>false</> otherwise
 */
private boolean parseDetailOmittedSite(String search) {
	return true;
}

/**
 * Parses the codified document in search of any of a publishments' site 
 * and excerpt written with a specific pattern.
 * @param search the publication
 * @return <b>true</b> if pattern matches, <b>false</> otherwise
 */
private boolean parseDetailOmittedDateLocation(String search) {
	Pattern siteExcerptPattern = Pattern.compile(" - (.*)</font>  <br>(.*)?<b>([' ']?)...</b> <br>");
	Matcher siteExcerptMatcher = siteExcerptPattern.matcher(search);		
	String tmp = null;
	Element location, site, excerpt;

	while (siteExcerptMatcher.find()) {
		site = new Element("site",Namespace.getNamespace(Constants.MyNAMESPACE));
		tmp = siteExcerptMatcher.group(1);
		tmp = tmp.replaceAll(" - ","");
		//System.out.println("SITE: "+tmp);
		site.addContent(tmp);
		paper.addContent(site);

		excerpt = new Element("excerpt",Namespace.getNamespace(Constants.MyNAMESPACE));
		tmp = siteExcerptMatcher.group(2);
		tmp = (tmp.replaceAll("<([/]?)b([r]?)>","").concat(" ..."));
		excerpt.addContent(tmp);
		paper.addContent(excerpt);
	}
	if (tmp == null)
		return false;

	return true;
}


/**
 * Parses the codified document in search of any links.
 * @param search the publication
 */
private void parseLinksToPublication(String search) {
	Pattern linksToPublicationPattern = Pattern.compile("<a href=\"/url\\?sa=U&q=(.*?)\"><font color=#7777CC>(.*?)</font>", Pattern.MULTILINE);
	Matcher linksToPublicationMatcher = linksToPublicationPattern.matcher(search);		
	String tmp = null;
	Element link;
	Attribute url, name;

	while (linksToPublicationMatcher.find()) {
		link = new Element("link",Namespace.getNamespace(Constants.MyNAMESPACE));

		tmp = linksToPublicationMatcher.group(2);
		if (tmp.length() >=8)
			if (!(tmp.subSequence(0,8)).equals("Cited by")) {
				if (tmp.length() == 12 && (tmp.subSequence(0,12)).equals("View as HTML"))
					break;

				name = new Attribute("name",tmp);					

				tmp = linksToPublicationMatcher.group(1);
				url = new Attribute("url",tmp);					

				link.setAttribute(name);
				link.setAttribute(url);

				paper.addContent(link);
			}
	}

}

/**
 * Prints the html page containing the google search results.
 *
 */
public void printPage() {
	System.out.println(thePage);
}

/**
 * Method that writes a scholar XML document to disk, it also
 * return the document for further processing thus avoiding
 * another HDD read
 * @return myDocument - the final version of the document
 * @throws IOException 
 */
public Document writeScholarXML() throws IOException{
	Writer.writeXML(myDocument,"publications.xml");
	return myDocument;
}

/**
 * Method that converts the ScholarXMLDocument to a string. 
 * @return the scholar xml document converted into a string
 */
public String getScholarXMLDocument() {
	StringBuffer doc = null;
	try
	 {
	     XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
	     StringWriter writer = new StringWriter(); //Crio uma StringWriter
	     out.output(myDocument, writer);  //escrevo um doc XML para uma String
	     doc = writer.getBuffer(); //Imprimo a string
	 }
	 catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	return doc.toString();
}
}




0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

BTW esta classe faz o parse de HTML e transforma-o em XML (atraves do JDOM). Nao sei se alguma vez deste ou utilizaste expressoes regulares mas e extremamente simples e ha n tutorias na net (a expressao propriamente dita e quase multilinguagem)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi olha estou a ter uns problemas com as libs ! O netbeans não tem esses pacotes.o is.sholar.* ele diz que não encontra os pacotes. Qual é o prg que usas ? è o jbuilder ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LoL. Essa package faz parte do programna que eu fiz por isso nao a encontras. Isto era so para ser usado a titulo de exemplo por exe,plo para isres buscar todos os URL's (hrefs) de uma determinada string HTML usas :

Pattern linksToPublicationPattern = Pattern.compile("<a href=\"/url\\?sa=U&q=(.*?)\"><font color=#7777CC>(.*?)</font>", Pattern.MULTILINE);

Matcher linksToPublicationMatcher = linksToPublicationPattern.matcher(search);

depois um ciclo while com:

while (linksToPublicationMatcher.find()) {}

percorre-te os resultados.

Isto serve para fazer coisas tipo: tens um template dos teus com varios campos que tem de ser preenchidos, podem ser inputs ou outra coisa qq. procuras esse campos no meio do html com expressoes regulares ex( Pattern.compile("kk koisa aqi"):) acrescentas ou substituis o que queres e depois adicionas a uma string que vai ser o teu resultado final.

Num exemplo mais concreto tens um template em que queres mudar o titulo da pagina:

Passos:

1 - sacas a string html completa da pagina

2 - les linha a linha

3 - em cada linha procuras por uma string que faça match a expressao regular correspondente ao titulo

4- se econtrares substituis a expressao pelo que quiseres

5 - adicionas a linha (processada ou nao) a uma string que e o teu resultado final.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora