Примеры программирования на Java

Подсчет слов, строк и байт в файле
(netwc.java)

Описание апплета
Пример работы апплета

import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;
import java.util.*;



public class netwc extends Applet {
  /*
    Класс netwc - потомок класса Applet
  */
  
  TextField words;
  TextField bytes;
  TextField strings;
  TextField url;
  TextArea  htmlText;
  

  public void init ()      {
    /*
      В методе init () создаются метки ; кнопка 'Get' ; текстовые поля
      TextField , в которых будет отображаться количество строк—, слов и
      байт в ресурсе , который определяет URL ; поле для отображения самого
      URL и поле для вывода содержимого ресурса ( объект класса TextArea).
      Затем создаются менеджеры компоновки и служебные объекты класса Panel.
      После чего созданные управляющие комппоненты "вставляются" в отведенные
      для них места в панели panel и panel2.
    */
    Label wordsL   = new Label ("Words: ");
    Label bytesL   = new Label ("Bytes: ");
    Label stringsL = new Label ("Strings: ");
    Label urlL     = new Label ("URL: ",Label.RIGHT);
    
    Button    getButton = new Button("Get");
    words     = new TextField ();
    bytes     = new TextField ();
    strings   = new TextField ();
    url       = new TextField ();
    htmlText  = new TextArea  ();
    
    url.setText("http://");
    
    words.setEditable(false);
    bytes.setEditable(false);
    strings.setEditable(false);
    htmlText.setEditable(false);
    
    Panel panel = new Panel();
    Panel panel2 = new Panel();

    panel.setLayout(new GridLayout(2,3));
    panel.add(bytesL);
    panel.add(wordsL);
    panel.add(stringsL);
    panel.add(bytes);
    panel.add(words);
    panel.add(strings);
    panel2.setLayout(new BorderLayout());
    panel2.add("West",urlL);
    panel2.add("Center",url);
    panel2.add("East",getButton);
    
    setLayout(new BorderLayout());
    add("South",panel);
    add("Center",htmlText);
    add("North",panel2);
    
  }
  
  public boolean action(Event evtObj, Object arg) {
    /*
      Метод action(Event, Object) служит для обработки приложением событий
      клавиатуры , мыши и т.д.
      В данном случае определяется - была ли нажата кнопка "Get" , и если
      была , то вызывается метод getHtml()
    */
    if(evtObj.target instanceof Button) {
      if(arg.equals("Get"))
        getHtml();
      return true;
    }
    return false;
  }
  
  void getHtml () {
    /*
      В методе getHtml() выполняется вся полезная работа апплета :
      По введенному пользователем URL запрашивается ресурс ( например HTML
      файл ), который помещается в переменную типа StringBuffer,
      а затем при помощи объекта класса StringTokenizer строка из 
      StringBuffer делится на подстроки , отделенные пробелом , знаком
      табуляции , новой строки или возвратом каретки . Получившееся
      количество таких подстрок и является количеством слов в документе.
      Для того, чтобы определить количество строк в документе, строка
      делится на подстроки , разделенные символом новой строки и
      возврата каретки.
      Длина документа в байтах определяется при помощи метода getInputStream
      класса URLConnection.
      Если все прошло успешно , то вычисленные значения помещаются в
      текстовые поля words , bytes , strings , а текст полученного документа
      помещается в htmlText.

      Примечание:
      -----------
      Как известно , в браузерах апплетам запрещен доступ по сети к другим
      комппьютерам кроме того , с которого апплет был загружен
      По-этому если вы запускаете апплет из браузера то имеете доступ
      только к документам на сервере , с которого был получен апплет.
      Если же вы используете appletviewer , входящий в JDK , то этот запрет
      можно отключать и получать доступ к любым документам.
    */
    URL u;
    URLConnection uCon;
    try {
      u = new URL (url.getText());
      uCon = u.openConnection();
    } 
    catch (Exception e) { 
      words.setText("???");
      bytes.setText("???");
      strings.setText("???");
      htmlText.setText("Can't get this page.");
      return; 
    };
    int length = uCon.getContentLength();
    if (length?0) {
      StringBuffer st = new StringBuffer(length);
      try {
        InputStream input = uCon.getInputStream();
        int i = length;
        int c;
        while (((c = input.read()) != -1) ?? (--i ? 0)) {
          st.append((char)c);
        }
        input.close();
      } catch (Exception e)
        {};
      bytes.setText(Integer.toString(length));
      htmlText.setText(st.toString());
      StringTokenizer stoken = new StringTokenizer (st.toString(),"\n");
      strings.setText(Integer.toString(stoken.countTokens()));
      stoken = new StringTokenizer (st.toString());
      words.setText(Integer.toString(stoken.countTokens()));
    }
    else {
      words.setText("???");
      bytes.setText("???");
      strings.setText("???");
      htmlText.setText("Can't get this page.");
    }
    
  }
}


Вступление | Примеры | Вопросы
Sun Microsystems
JavaSoft