PDA

View Full Version : شبه برنامه



iman_reih
سه شنبه 21 شهریور 1391, 09:56 صبح
سلام
باتوجه به کمبود منابع فارسی در حوزه برنامه نویسی، مخصوصا جاوا به این فکر رسیدم که هر روز شبه برنامه هایی را که روزانه برای کارهای مختلف در جاوا استفاده میشود را در این تاپیک قرار بدهم و توضیحی در مورد آنها بدهم، امیدوارم که برای جامعه برنامه نویس مفید باشد.

iman_reih
سه شنبه 21 شهریور 1391, 10:52 صبح
خواندن خط به خط از یک فایل در جاوا

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

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 (http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html) یکی از کلاس هایی است که با استفاده از آن میتوان به منبعی خارج از برنامه دسترسی پیدا کرد.
کلاس DataInputStream (http://docs.oracle.com/javase/6/docs/api/java/io/DataInputStream.html) کلاسی است که با استفاده از آن میتوان داده ها را بصورت داده ابتدایی (Primitive Data Type) و بصورت مستقل از ساختار پلتفرم از هر Input Stream مانند FileInputStream خواند.
در خط بعدی کلاس InputStreamReader (http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStreamReader.html) مانند پلی داده های باتی را به داده هایی از نوع کاراکتر تبدیل میکند.
در خط بعدی کلاس BufferedReader (http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html) داده های کاراکتری را برای دسترسی بهتر و سریعتر buffer میکند.
و در نهایت با استفاده از حلقه while داده ها را از buffer بصورت خطی میخواند و آنها را در متغییر strLine ذخیره میکند و در console برنامه چاپ میکند.
و در انتها اتصال ایجاد شده به منبع خارجی را میبندد.
کل مجموعه کد در بلوک try - catch قرار دارد که اگر خطایی رخ داد ( مثلا منبع ارجاع داده شده textfile وجود نداشته باشد)، خطا شناسایی شود.

spiderman200700
سه شنبه 21 شهریور 1391, 11:47 صبح
ممنون از شما. این مطالب قطعا برای خیلی ها مفید خواهد بود.

mohammadriano
سه شنبه 21 شهریور 1391, 13:38 عصر
باتوجه به کمبود منابع فارسی در حوزه برنامه نویسی، مخصوصا جاوا
کدام کمبود
این همه منبع؟

iman_reih
سه شنبه 21 شهریور 1391, 14:39 عصر
نوشتن متن در یک فایل با استفاده از جاوا

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

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("salam");

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

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

iman_reih
پنج شنبه 06 مهر 1391, 09:13 صبح
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://www.barnamenevis.org");
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 (http://docs.oracle.com/javase/1.4.2/docs/api/java/net/URL.html) استفاده شده است. این کلاس مانند یک اشاره گر به یک منبع در وب میباشد حالا این منبع میتواند یک فایل یا یک دایرکتوری باشد.
در خط بعدی با استفاده از متد ()openStream کانکشنی با آن منبع مشخص شده در کلاس URL برقرار میکند و آنرا میخواند و یک کلاس InputStream (http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html) برمیگرداند.
از این مرحله به بعد همانند خواندن داده از یک فایل رفتار میکنیم.
و در مرحله بعد از کلاس InputStreamReader (http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStreamReader.html) مانند پلی داده های باتی را به داده هایی از نوع کاراکتر تبدیل میکند.
و در مرحله بعدی کلاس BufferedReader (http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html) داده های کاراکتری را برای دسترسی بهتر و سریعتر buffer میکند.
و در نهایت با استفاده از حلقه while داده ها را از buffer بصورت خطی میخواند و آنها را در متغییر strTemp ذخیره میکند و در console برنامه چاپ میکند.
کل مجموعه کد در بلوک try - catch قرار دارد که اگر خطایی رخ داد، خطا شناسایی شود.