ورود

View Full Version : سوال درمورد IOException



Hengameh.Hoseini
یک شنبه 09 فروردین 1394, 12:02 عصر
این تیکه کد که تو اکثر برنامه ها هست, چه زمانی اجرا می شه؟ (یعنی کاربر باید چی وارد کنه, که این قسمت اجرا بشه؟)


catch(IOException ioe)
{
System.out.println("IO Error :" + ioe);
System.exit(0);
}

مثلا اینجا یک نمونه از این کدها هست:
http://www.java-examples.com/calculate-rectangle-perimeter-using-java-example

cups_of_java
یک شنبه 09 فروردین 1394, 12:05 عصر
زمانی که ارتباط ورودی خروجی شما قطع بشه یا وصل نشه...
مثلن زمانی که میخواید یه فایل رو بخونید ولی وجود نداره
یا زمانی که از روی شبکه میخونید ولی شبکه قطع میشه
...

-سیّد-
دوشنبه 24 فروردین 1394, 08:38 صبح
این تیکه کد که تو اکثر برنامه ها هست, چه زمانی اجرا می شه؟ (یعنی کاربر باید چی وارد کنه, که این قسمت اجرا بشه؟)



catch(IOException ioe)
{
System.out.println("IO Error :" + ioe);
System.exit(0);
}


مثلا اینجا یک نمونه از این کدها هست:
http://www.java-examples.com/calculate-rectangle-perimeter-using-java-example
همونطور که دوستمون گفتن، IOException هنگامی استفاده می‌شه که یک مشکل توی IO به وجود بیاد (همونطور که از اسمش پیداس).

کلاً Exception ها هنگامی استفاده می‌شن که روند طبیعی اجرای کد به هم بخوره. یعنی شما یه کد زدی که یه فایل رو می‌خونه و چاپش می‌کنه. خوب در حالت عادی همه چیز خوبه! اما اونجایی که دارید فایل رو می‌خونید، ممکنه سیستم به مشکل برخورد کنه. مثلاً فایل وجود نداشته باشه. یا هاردتون ضربه بخوره و دیگه اون فایل قابل استفاده نباشه. در این حالت، اون تابعی که باهاش اون فایل رو می‌خواستید بخونید، یک IOException پرت می‌کنه بالا و می‌رسه به کد شما.
حالا شما توی کدتون مخیّر هستید که یکی از این دو روش رو انتخاب کنید: یا شما هم توی تابعتون این Exception رو پرت می‌کنید بالا تا تابع بالایی مجبور بشه هندلش کنه، یا خودتون هندلش می‌کنید. چطوری؟ با یه try-catch. توی catch می‌گید که اگه این Exception پرت شد، بگیرش و این کاری که من می‌گمو باهاش بکن.

توی این نمونه کدی که فرستادید، اون IOException از این بخش ممکنه پرتاب بشه بالا:
br.readLine()
که دو بار هم استفاده شده.
فایلی که اینجا داره باهاش کار می‌کنه، System.in هست که واقعاً یه فایل نیست. بنابراین اون مشکلات که بالا گفتم براش پیش نمیاد (به هر جای هاردتون ضربه بخوره، برای System.in مشکلی پیش نمیاد!). اما با توجه به مفاهیم Abstraction، جاوای بیچاره نمی‌دونه که توی اون BufferedReader یه چیزیه که تقریباً ممکن نیست براش IOException رخ بده. برای همین بالاخره مجبورید این catch رو بنویسید، حتی اگه مطمئن هستید هیچ وقت اجرا نمی‌شه!

اما این که توی این مثال که فرستادید کی ممکنه IOException رخ بده، فکر نمی‌کنم ممکن باشه.