ایمان ریحانیان

دست خط یک برنامه نویس

ایمان ریحانیان

دست خط یک برنامه نویس

ایمان ریحانیان

زکات علم یاد دادن آن به دیگران است، کمک کنیم که علم گسترش یابد.

طبقه بندی موضوعی

۳ مطلب با موضوع «تکه کد» ثبت شده است

سلام

 

مطلب امروز در مورد خواندن صفحه وب با استفاده از کلاس های جاوا و بدون استفاده از API خاصی است که امیدوارم مفید واقع شود.

 


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class Main {
public static void main(String[] args) {
try {
URL url = new URL("http://blog.reihanian.com/");
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
String strTemp = "";
while(null != (strTemp = br.readLine())){
System.out.println(strTemp);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}



با استفاده از این نمونه کد میتوان درخواستی از نوع پروتکل HTTP فرستاد و جواب آنرا دریافت کرد یا به عبارت دیگر یک صفحه وب را خواند.
در خط اول برنامه از کلاس URL استفاده شده است. این کلاس مانند یک اشاره گر به یک منبع در وب میباشد حالا این منبع میتواند یک فایل یا یک دایرکتوری باشد.
در خط بعدی با استفاده از متد ()openStream کانکشنی با آن منبع مشخص شده در کلاس URL برقرار میکند و آنرا میخواند و یک کلاس InputStream برمیگرداند.
از این مرحله به بعد همانند خواندن داده از یک فایل رفتار میکنیم.
و در مرحله بعد از کلاس InputStreamReader مانند پلی داده های باتی را به داده هایی از نوع کاراکتر تبدیل میکند.
و در مرحله بعدی کلاس BufferedReader داده های کاراکتری را برای دسترسی بهتر و سریعتر buffer میکند.
و در نهایت با استفاده از حلقه while داده ها را از buffer بصورت خطی میخواند و آنها را در متغییر strTemp ذخیره میکند و در console برنامه چاپ میکند.
کل مجموعه کد در بلوک try - catch قرار دارد که اگر خطایی رخ داد، خطا شناسایی شود.

۰ موافقین ۰ مخالفین ۰ ۰۶ مهر ۹۱ ، ۰۹:۴۹
ایمان ریحانیان

بعد از خواندن از یک فایل متنی به وسیله جاوا میتوان همان برنامه را با اندکی تغییر به برنامه ای برای نوشتن متن در یک فایل تبدیل کرد، که شبه برنامه زیر این کار را انجام میدهد :

 

class FileWriter {
    public static void main(String args[]) {
        try {
            FileOutputStream fstream = new FileOutputStream("textfile.txt");

            DataOutputStream out = new DataOutputStream(fstream);
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
            bw.write("blog.reihanian.com");

            bw.flush();
            out.close();
            fstream.close();
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}

در خط اول کلاس FileOutputStream اتصالی با فایل متنی مورد نظر بر قرار میکند و چون قرار است داده ای در این فایل نوشته بشود در صورت پیدا نکردن فایل مورد نظر آنرا میسازد و خطا رخ نمیدهد و با استفاده از این کلاس فقط میتوان داده ها را بصورت بایت (byte) ذخیره کرد.
کلاس DataOutputStream داده ها را برای تبدیل از متغییر های اولیه (primitive data type) به متغییر های برای استفاده در انواع output stream مانند FileOutputStream که از ساختار پلتفرم جدا است تبدیل میکند.
با استفاده از کلاس OutputStreamWriter میتوان داده ها از نوع کاراکتری به داده ها از نوع بایت (byte) تبدیل کرد.
در قسمت بعد با استفاده از کلاس BufferedWriter میتوان داده ها در buffer نوشت، که برای نوشتن داده ها از متد write استفاده شده است.
پس از نوشتن متن مورد نظر در buffer میتوان با استفاده از متد flush داده ها را از buffer به فایل منتقل کرد.
پس از آن بترتیب کلاس های DataOutputStream و FileOutputStream را میبندیم تا اتصال ایجاد شده با منبع خارجی از بین برود و داده ها در فایل ذخیره بشوند.
کل مجموعه کد در بلوک try - catch قرار دارد که اگر خطایی رخ داد ، خطا شناسایی شود.

۱ موافقین ۰ مخالفین ۰ ۲۱ شهریور ۹۱ ، ۱۵:۱۱
ایمان ریحانیان

معمولا در برنامه نویسی برای هر کاری چندین راه حل مختلف وجود دارد که در همین مورد هم مطرح است، برای خواندن متن از یک فایل چندین راه حل وجود دارد که من یکی از آنها را اینجا توضیح میدهم.

 

import java.io.*;
class FileRead
{
 public static void main(String args[])
  {
  try{
 
  FileInputStream fstream = new FileInputStream("textfile.txt");
 
  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine;
 
  while ((strLine = br.readLine()) != null)   {
 
  System.out.println (strLine);
  }
 
  in.close();
    }catch (Exception e){
  System.err.println("Error: " + e.getMessage());
  }
  }
 

اگر برنامه بالا را اجرا کنید شروع به خواندن از فایلی به نام textfile با پسوند txt میکند، که به توضیح آن میپردازم.
کلاس FileInputStream یکی از کلاس هایی است که با استفاده از آن میتوان به منبعی خارج از برنامه دسترسی پیدا کرد.
کلاس DataInputStream کلاسی است که با استفاده از آن میتوان داده ها را بصورت داده ابتدایی (Primitive Data Type) و بصورت مستقل از ساختار پلتفرم از هر Input Stream مانند FileInputStream خواند.
در خط بعدی کلاس InputStreamReader مانند پلی داده های باتی را به داده هایی از نوع کاراکتر تبدیل میکند.
در خط بعدی کلاس BufferedReader داده های کاراکتری را برای دسترسی بهتر و سریعتر buffer میکند.
و در نهایت با استفاده از حلقه while داده ها را از buffer بصورت خطی میخواند و آنها را در متغییر strLine ذخیره میکند و در console برنامه چاپ میکند.
و در انتها اتصال ایجاد شده به منبع خارجی را میبندد.
کل مجموعه کد در بلوک try - catch قرار دارد که اگر خطایی رخ داد ( مثلا منبع ارجاع داده شده textfile وجود نداشته باشد)، خطا شناسایی شود.
۳ موافقین ۰ مخالفین ۰ ۲۱ شهریور ۹۱ ، ۱۱:۲۷
ایمان ریحانیان