Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Първи стъпки в програмирането на JAVA
  1. Първи стъпки в програмирането на JAVA
  2. Първи стъпки в програмирането на JAVA - II
PureEvil
     
Автор  PureEvil (07.05.2006 11:23)  съобщение до автора
Погледнат  22124 пъти  добави към любими
Оценка  добави коментар
Гласове  51  изпрати на приятел
Коментари  (14)  абонирай се за Java
    Страница 2 / 2

 



Останалата част от кода е часта, която прави това за което споменахме в началото на тази част от статията. С помоща на URL url = new URL(args[0]); създаваме нов обект от тип URL като адреса който ще прочете се садържа в първия низ(args[0]). Следва четенето на съдържанието това става от следният код:

CODE
1
2
3
4
5
6
7

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str, newstr = "";
while ((str = in.readLine()) != null) {
      
newstr = newstr + str;
}
in.close();


Както се вижда прилагането на метод на даден обект става ИМЕ_НА_ОБКЕМТ.(ТОЧКА)ИМЕ_НА_МЕТОДА(). Методи в случая са openStream() на обеката url, readLine() и close()  на обкента in. Прочитаме инфорамцията от страницата ред по ред и я записваме във една стрингова променлива newstr. Сливането на стрингове става с помоща на оператора +.

Ползването на регулярни изрази е много лесно. Те трябва да са обкет от Pattern. За да намерим съвпаденията трябва да ползваме метода matcher();

CODE
1
2
3

    Pattern p = Pattern.compile("[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}");
   
Matcher m = p.matcher(newstr);

Страното при ползването на регулярни изрази(може и да не е страно, ако не сте ползвали друг език за програмиране), е че трябва да „ескепйвате“ с 2 наклонени черти .(точката) в израза. С метода find() обхождаме всички съвпадения от изпълнението на регулярния израз.
    Със BufferedWriter създаваме обект out, който ще пише във файла който сме създали с FileWriter в случая mail.txt.

CODE
1
2
3
4
5

while (m.find()) {
   
System.out.println("Found e-mails: " + m.group());    //отпечатваме на екрана
   
out.write( m.group() + "rn" );            //записваме във файла
}

    Сега остава да компилираме файла и ад го пуснем за да видите как работи. Тъй като в началото не създадохме проект нямаме възможност да зададем параметри с които да се изпълни файла(виж фиг.1)
фиг.1


    За целта ще изшълним програмта през конзолата. Натиснате Start след това Run където напишете command -> Win9x или cmd -> WinXP, Win2k ... след което влезте в директорията където ви се намира компилирания файл(.class) и изпълнете:
class ImetoNaClassa http://site.com



Както виждате не се правят проверки за съвпадение на майловте.


    Пример 02 – проверява дали даден хост им отврорен порт(много неясно нали :))

    Преди да преминем към кода на пргорамта, ще се опитам по-подорбно да обясня какво прави. Както и предишната прогмра и тази приема аргументи от конзола(command line е по правилното), но този път са 2 – хост и порт. Разделянето на тези аргументи става като ползваме интервал: java ClassName site.com 80. Във JAVA теази променливи са достъпни от масива args[] от тип стринг, като отделните елементи се разделят с интервал. аrgs[0] е хоста, а args[1] е порта. Тъй като порта не може да бъде стринг, ползваме метода parseInt() да го конвертираме: int port = Integer.parseInt(args[1]); Другото ново в този проерм е че ще ползвам е сокет: socket = new Socket(args[0], port); след което прилагаме методите на този обект да осъществим връзка: getOutputStream по което разбираме дали е отворен или не.
Ако порта е отворен можем да подаден някакву данни към него, примерно ако видим че порт 80 е отворен с изпращане на: OPTIONS * HTTP/1.0rnrn ние ще получим информаци от сървъра. В случая отпечатваме само информация за сървъра.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

import java.io.*;
import java.net.*;

/*************************************
 *
project: NP 2006
 *
author: PureEvil
 *
filename: ZadachaCheckPort.java
 *
last change: 16.04.2006
 ************************************/

public class ZadachaCheckPort {   
   
public static void main(String args[]) throws Exception {
       
Socket socket = null;
       
int port = Integer.parseInt(args[1]);
       
PrintWriter out = null;
       
BufferedReader in = null;
           
       
if ( args.length < 1 ) {
           
System.out.println("Zemi napsihi parametrite ba!");
       
}
       
else {
          
//check port
               try
{
               
InetAddress ip = InetAddress.getByName(args[0]);
               
socket = new Socket(args[0], port);
               
out = new PrintWriter(socket.getOutputStream(), true);
               
in = new BufferedReader(new InputStreamReader( socket.getInputStream() ) );           
           
} catch (UnknownHostException e) {
               
System.out.println("Don't know about host.");
               
System.exit(1);
           
} catch (IOException e) {
               
System.out.println("Port is not open.");
               
System.exit(1);
           
}
           
System.out.println("Port is open.");
           
switch (port) {
               
case 80:
                   
out.println("OPTIONS * HTTP/1.0rnrn");
                      
out.flush();
                      
String line;
                      
while ( ( line = in.readLine() ) != null ) {
                          
if ( line.indexOf("Server:") != -1) {
                              
System.out.println(line);
                          
}
                       }
                  
break;   
                  
case 21:
                       
System.out.println("This is FTP");
                  
break;
                  
case 22:
                      
System.out.println("This is SSH");
                  
break;
                  
case 53:
                      
System.out.println("This is DNS");
                  
break;
                  
case 110:
                      
System.out.println("This is POP3 Server");
                  
break;
                  
default:
                      
System.out.println("This is Unknow port: ("+port+")" );
                  
break;
           
}
               
       }
      
         
out.close();
       
in.close();
   
}
}


Заключение:
    Най-верояно сте разбрали, че не разбирам от JAVA и не го понасям този език :), но така се стекоха обстоятелствата че се наложи да направя тези неща, които така и не ми потрябваха в университета. Така че надявам се на някой поне да му свършат работа. А и това е едно доказателство, че курсови задачи и домашни могат да се напишат без да разбирате нищо от даден език. Програмите работят, а това колко са полезни е друг въпрос :)


Тази статия е публикувана под: Creative Commons Attribution-ShareAlike 2.5 License
 



 << Предишна страница  


Ключови думи: Java програмиране jdk регулярни изрази първи стъпки


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

@silver_fox благодаря за коментара, но по-принцип се ескпейва със една наклонена черта. Това с чертата е обсъждано и преди, при мен работеше така както съм го пуснал, после отново разбрах че JAVA е дърво и нещата не са такива каквито са ;).

  PureEvil на 23.06.2008 11:05

Това с намирането на e-mail е много добро само има една малка
неточност:

D:\Java>javac ZadachaRegExpMails.java
ZadachaRegExpMails.java:33: illegal escape character
"[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}"
                тук трябва да е \\.  -това се налага защото'.'
е специален символ в регулярният израз (обозначава класа от всички символи).Самият String първо се обработва от компилатора при което \\. става на \. a \. се подава на машината на  регулярният израз.
"[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"

  silver_fox на 22.06.2008 21:27

Няма спор че е полезен език.
Това което говориш за големите файлове ... защо програмка на JAVA? Сложи си едно нормално IDE и си готов ;).

  PureEvil на 08.10.2007 10:27

Аз съм от "селските", както казваше един мой преподавател, които пишат на С и ползват VIM 
Обаче в лабораторията като имам някакъв огромен файл, съдържащ някакво дърво и трябва да го проверя, предпочитам да си напиша набързо една програмка на JAVA, която да ми го показва с бутончета за скриване и показване на всеки възел. На C да напишеш подобно нещо отнема доста повече време, а не това е работата, която трябва да върша.  От тази година в първи курс (той е общ за 5-6 специалности) във въведение в информатиката трябва да им се говори малко за теория на автоматите и приложенията, та магистрите, които работим в лабораторията към катедрата сме решили да направим нещо като игра написана JAVA в която се строят автомати, разпознаващи езика описан от даден регулярен израз и да се извършват разни действия като конкатениране, обединение, емондиране, детерминиране и т.н.
Така, че JAVA е полезен език. За всеки влак си има пътници 

  SOMNIVM на 08.10.2007 02:11

Хехе, човек ако си е играл 2-3-4 седмици с ООП няма да има нужда от такива Първи стъпки.
Както казах: мразя JAVA. Просто така и така трябваше да пиша тия глупости та реших да споделя творението и да се покаже на масата потребители, които питат за курсови задачи че не е трудно да си ги направиш сам.

Не може да се сетиш? Да не си и ти поредния JAVA програмист, който не знае какво е документация(не се заяждам и не целя да те обидя. просто е масово сред JAVA програмистите да пишат кофти софтуер ;))

  PureEvil на 22.08.2006 15:01

Впрочем за err и out потоците - на някои платформи, като *NIX like такива, има отделни привилегии за System.err, т.е. например записване в log файл, друг вид оцветяване и прочие. Просто в Windows не навсякъде е засегнато правилното опериране с класовете.

  nofearinc на 18.08.2006 01:09

Първи стъпки, а? :) Става за първи стъпки за човек, който е пипал ООП и си е играл минимум 2-3-4 седмици, за да има чудесна представа за какво иде реч.

Тея буферирани четци като че ли загрубяват нещата... Един PrintStream нямаше ли да свърши работа?
И като цяло е доста тежко- ако не бях ползвал URL класа, сигурно изобщо нямаше да се сетя какво става ; ))

  nofearinc на 18.08.2006 01:07

Ами няма значение, все пак се оправих, обаче чак след като минах на Net Beans 5.0., което не ме устройва, понеже, предпочитам по-лекия компилатор на JCreator :)

  Tabledott на 06.08.2006 08:10

BigInteger ??? Че къде в примерите го има това?
Виж сега ако ползваш разни екстри които не са част от основаната дистрибуция(ако мога така да се изразя :)) ползвам документацията на дадената библиотека или там  каквото е. Примерите тук изпозлват неща само от стандартните библиотеки, които идват с jdk-1_5_0_06-windows-i586-p.exe ;)

  PureEvil на 24.07.2006 10:32

Ами само искам да добавя, 4е изтегляйки така посочените неща, също не ми работи и класа BigInteger  (сигурен съм, защото съм тествал с работещ код и т.н.)

  Tabledott на 16.07.2006 15:37

Това за Scanner класа го гледах някаде на скоро ... но не помня къде. Допълнително се сваля(или поне такива спомени имам), но повече подробности на сайта на SUN.

  PureEvil на 10.07.2006 14:49

Да, наистина урока е много добър, обаче имам следния проблем, като инсталирам exe-to и IDE-то, описани в урока и след това при компилация ми дава "class Scanner not found", интересно къде е проблема ?

  Tabledott на 29.06.2006 08:56

Много добра статия :). Хареса ми и смятам, че човек, който за пръв път хваща Java ще има полза от нея.
Само две бележчици.
1. Списъкът с ключовите думи е от 1.4, в 1.5 има нова и тя е enum.
2. Причината за двойната обратно наклонена черта (\), е, че регулярният израз се подава като String, а \ трябва да се "ескейпва" в стринговете.

  ShaMan-H_Fel на 21.06.2006 21:25

Наскоро един потребител от форума забеляза че при него сорса се компилира само ако махне \\ от регулярния израз. JAVA странна работа е това :) така че ако ви дава грешка опитайте това.

  PureEvil на 10.06.2006 08:44

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008