JavaRush /جاوا بلاگ /Random-SD /I/O جاوا ۾. ڪلاسز FileInputStream، FileOutputStream، Buff...

I/O جاوا ۾. ڪلاسز FileInputStream، FileOutputStream، BufferedInputStream

گروپ ۾ شايع ٿيل
سلام! اڄ جي ليڪچر ۾ اسان جاوا ۾ ان پٽ ۽ آئوٽ پُٽ اسٽريمز جي باري ۾ گفتگو جاري رکنداسين، يا جاوا I/O (“input-output”) مختصر لاءِ. هي هن موضوع تي پهريون ليڪچر نه آهي، ۽ اهو آخري نه هوندو :) اهو صرف ائين ٿئي ٿو ته Java هڪ ٻولي طور ان پٽ/آئوٽ پٽ سان ڪم ڪرڻ جا ڪيترائي موقعا فراهم ڪري ٿي. اتي تمام گھڻا ڪلاس آھن جيڪي ھن فنڪشنلٽي کي لاڳو ڪن ٿا، تنھنڪري اسان انھن کي ڪيترن ئي ليڪچرن ۾ ورهايو آھي ته جيئن توھان اول ۾ پريشان نه ٿيو :) I/O جاوا ۾.  ڪلاسز FileInputStream، FileOutputStream، BufferedInputStream - 1پوئين ليڪچرن ۾ اسان BufferedReader تي ھٿ ڪيو ، گڏوگڏ خلاصو ڪلاس InputStream ۽ OutputStream ۽ ڪيترائي. اولاد. اڄ اسين 3 نون طبقن تي نظر ڪنداسين: FileInputStream ، FileOutputStream ۽ BufferedInputStream .

FileOutputStream ڪلاس

FileOutputStream ڪلاس جو بنيادي مقصد ھڪڙي فائل تي بائيٽ لکڻ آھي. ڪجھ به پيچيده ناهي :) FileOutputStream خلاصي OutputStream طبقي جي عملن مان هڪ آهي . ڪنسٽرڪٽر ۾، هن ڪلاس جون شيون يا ته ٽارگيٽ فائل ڏانهن رستو وٺن ٿيون (جنهن تي بائيٽ لکڻ گهرجن) يا ڪلاس جو ڪو اعتراض File. اچو ته ٻنهي مثالن کي ڏسو:
public class Main {

   public static void main(String[] args) throws IOException {


       File file = new File("C:\\Users\\Username\\Desktop\\test.txt");
       FileOutputStream fileOutputStream = new FileOutputStream(file);

       String greetings = "Hi! Welcome to JavaRush - the best site for those who want to become a programmer!";

       fileOutputStream.write(greetings.getBytes());

       fileOutputStream.close();
   }
}
جڏهن هڪ شئي ٺاهي، Fileاسان تعمير ڪندڙ ۾ اهو رستو بيان ڪيو آهي جتي اهو واقع هجڻ گهرجي. ان کي اڳ ۾ پيدا ڪرڻ جي ڪا ضرورت ناهي: جيڪڏهن اهو موجود ناهي، اهو پروگرام پاڻ ٺاهيندو. توهان بغير ڪنهن اضافي شئي ٺاهڻ جي ڪري سگهو ٿا ۽ صرف پتي سان هڪ اسٽرنگ پاس ڪريو:
public class Main {

   public static void main(String[] args) throws IOException {


       FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\test.txt");

       String greetings = "Hi! Welcome to JavaRush - the best site for those who want to become a programmer!";

       fileOutputStream.write(greetings.getBytes());

       fileOutputStream.close();
   }
}
ٻنهي صورتن ۾ نتيجو ساڳيو ٿيندو. اسان پنهنجي فائل کي کوليو ۽ اتي ڏسي سگهون ٿا:

Hello! Добро пожаловать на JavaRush — лучший сайт для тех, кто хочет стать программистом!
تنهن هوندي به، هتي هڪ caveat آهي. ڪوشش ڪريو مٿي ڏنل مثال مان ڪوڊ کي لڳاتار ڪيترائي ڀيرا، ۽ پوءِ فائل ڏسو ۽ ان سوال جو جواب ڏيو: توھان ان ۾ لکيل ڪيتريون لائينون ڏسو ٿا؟ فقط ھڪ. پر توهان ڪيترائي ڀيرا ڪوڊ ورتا. بهرحال، اهو ظاهر ٿئي ٿو ته ڊيٽا هر وقت اوور رائٽ ڪئي وئي، پراڻين کي تبديل ڪندي. ڇا جيڪڏهن اسان هن سان مطمئن نه آهيون ۽ ترتيب واري رڪارڊنگ جي ضرورت آهي؟ ڇا جيڪڏهن اسان چاهيون ٿا ته اسان جو سلام لکڻ لاءِ هڪ فائل تي ٽي ڀيرا قطار ۾؟ هتي سڀ ڪجھ سادو آهي. جيئن ته ٻولي پاڻ نه ٿو ڄاڻي سگهي ته اسان کي هر صورت ۾ ڪهڙي قسم جي رويي جي ضرورت آهي، FileOutputStreamتوهان هڪ اضافي پيٽرولر کي تعمير ڪندڙ ڏانهن منتقل ڪري سگهو ٿا - boolean append. جيڪڏهن ان جي قيمت صحيح آهي ، ڊيٽا کي فائل جي آخر تائين لکيو ويندو. جيڪڏهن غلط آهي (۽ ڊفالٽ قدر غلط آهي )، پراڻي ڊيٽا ختم ٿي ويندي ۽ نئين ڊيٽا لکي ويندي. اچو ته اسان جي تبديل ٿيل ڪوڊ کي ٽي دفعا جانچون ۽ هلون:
public class Main {

   public static void main(String[] args) throws IOException {


       FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\test.txt", true);

       String greetings = "Hi! Welcome to JavaRush - the best site for those who want to become a programmer!\r\n";

       fileOutputStream.write(greetings.getBytes());

       fileOutputStream.close();
   }
}
فائل ۾ نتيجو:

Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
ٻي ڳالهه! I/O ڪلاس استعمال ڪرڻ وقت ھن خصوصيت کي ذهن ۾ رکو. هڪ دفعي، مون کي ڪمن تي ڪلاڪن لاءِ ويهڻو پيو ته اهو سمجهڻ لاءِ ته منهنجو پراڻو ڊيٽا فائلن مان ڪٿي ويو :) ۽ يقيناً، جيئن ٻين I/O ڪلاسن جي صورت ۾، وسيلن کي جاري ڪرڻ جي باري ۾ نه وساريو close().

FileInputStream ڪلاس

ڪلاس جو FileInputStreamمخالف مقصد آهي - فائل مان بائيٽ پڙهڻ. FileOutputStreamوراثت وانگر OutputStream، هي طبقو خلاصي طبقي مان نڪتل آهي InputStream. اچو ته اسان جي متن ۾ متن جون ڪيتريون ئي لائينون لکون “ test.txt ”:

«So close no matter how far
Couldn't be much more from the heart
Forever trusting who we are
And nothing else matters»
I/O جاوا ۾.  ڪلاسز FileInputStream، FileOutputStream، BufferedInputStream - 2 اهو آهي جيڪو استعمال ڪندي فائل مان ڊيٽا پڙهڻ جو عمل FileInputStream:
public class Main {

   public static void main(String[] args) throws IOException {

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\test.txt");

       int i;

       while((i=fileInputStream.read())!= -1){

           System.out.print((char)i);
       }
   }
}
اسان فائل مان ھڪڙو بائيٽ پڙھون ٿا، پڙھيل بائيٽ کي ڪردارن ۾ تبديل ڪريو ۽ انھن کي ڪنسول ڏانھن ٻاھر موڪليو. ۽ هتي ڪنسول ۾ نتيجو آهي:

So close no matter how far
Couldn't be much more from the heart
Forever trusting who we are
And nothing else matters

BufferedInputStream ڪلاس

مان سمجهان ٿو، اڳئين ليڪچرن مان ڄاڻ ڏني وئي، توهان آساني سان ٻڌائي سگهو ٿا ته ڪلاس جي ضرورت ڇو آهي BufferedInputStream۽ ان جا ڪهڙا فائدا آهن FileInputStream:) اسان اڳ ۾ ئي بفر ٿيل اسٽريمز سان مليا آهيون، تنهنڪري پڙهڻ جاري رکڻ کان اڳ اندازو لڳائڻ (يا ياد رکڻ) جي ڪوشش ڪريو :) بفر ٿيل اسٽريمز I/O کي بهتر ڪرڻ لاءِ بنيادي طور تي گهربل آهن. ڊيٽا جي ماخذ تائين رسائي، جهڙوڪ فائل مان پڙهڻ، هڪ ڪارڪردگي-گھڻي آپريشن آهي. ۽ هر وقت هڪ بائيٽ پڙهڻ لاءِ فائل تائين رسائي فضول آهي. تنهن ڪري، BufferedInputStreamاهو ڊيٽا پڙهي ٿو هڪ وقت ۾ هڪ بائيٽ نه، پر بلاڪ ۾ ۽ عارضي طور تي انهن کي خاص بفر ۾ محفوظ ڪري ٿو. هي اسان کي اجازت ڏئي ٿو ته پروگرام جي آپريشن کي بهتر ڪرڻ جي ذريعي فائل تائين رسائي جي تعداد کي گهٽائڻ سان. اچو ته ڏسو ته اهو ڇا ٿو لڳي:
public class Main {

   public static void main(String[] args) throws IOException {

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\test.txt");

       BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream, 200);

       int i;

       while((i = bufferedInputStream.read())!= -1){

           System.out.print((char)i);
       }
   }
}
هتي اسان هڪ اعتراض ٺاهيو آهي BufferedInputStream. اهو هڪ اعتراض يا ان جي جانشين مان ڪنهن کي انپٽ طور قبول ڪري ٿو InputStream، تنهنڪري پوئين هڪ FileInputStreamڪندو. اهو بفر سائيز کي بائيٽ ۾ اضافي پيٽرولر طور وٺندو آهي. هاڻي، هن جي مهرباني، فائل مان ڊيٽا پڙهي ويندي هڪ وقت ۾ هڪ بائيٽ نه، پر هڪ وقت ۾ 200! تصور ڪريو ته اسان فائلن جي رسائي جو تعداد ڪيترو گھٽايو آھي. FileInputStreamڪارڪردگي جو مقابلو ڪرڻ لاءِ، توھان ڪجھ وڏي ٽيڪسٽ فائل وٺي سگھوٿا ڪيترائي ميگا بائيٽ سائيز ۾ ۽ موازنہ ڪري سگھوٿا ته ان کي پڙھڻ ۾ ڪيترو وقت لڳندو آھي ۽ ان کي استعمال ڪندي مليس سيڪنڊن ۾ ڪنسول ڏانھن ٻاھر ڪڍو BufferedInputStream. هتي ڪوڊ جا ٻئي مثال آهن:
public class Main {

   public static void main(String[] args) throws IOException {

       Date date = new Date();

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\textBook.rtf");

       BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

       int i;

       while((i = bufferedInputStream.read())!= -1){

           System.out.print((char)i);
       }

       Date date1 = new Date();

       System.out.println((date1.getTime() - date.getTime()));
   }
}



public class Main {

   public static void main(String[] args) throws IOException {

       Date date = new Date();

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\26951280.rtf");


       int i;

       while((i = fileInputStream.read())!= -1){

           System.out.print((char)i);
       }

       Date date1 = new Date();

       System.out.println((date1.getTime() - date.getTime()));
   }
}
جڏهن منهنجي ڪمپيوٽر تي هڪ 1.5 MB فائل پڙهي، FileInputStreamاهو ڪم ~ 3500 ملي سيڪنڊن ۾ ڪيو، پر هتي BufferedInputStreamاهو ڪم ~ 1700 ملي سيڪنڊن ۾ ڪيو. جئين توهان ڏسي سگهو ٿا، بفر ٿيل وهڪرو پروگرام جي ڪارڪردگي کي 2 ڀيرا بهتر ڪيو! :) اسان I/O ڪلاس جو مطالعو جاري رکنداسين - پوءِ ملنداسين!
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION