JavaRush /Blog Jawa /Random-JV /I/O ing Jawa. Kelas FileInputStream, FileOutputStream, Bu...

I/O ing Jawa. Kelas FileInputStream, FileOutputStream, BufferedInputStream

Diterbitake ing grup
Hello! Ing kuliah dina iki kita bakal nerusake obrolan babagan input lan output stream ing Jawa, utawa Jawa I/O ("input-output") kanggo singkatan. Iki dudu kuliah pisanan babagan topik iki, lan ora bakal dadi sing pungkasan :) Kedadeyan yen Jawa minangka basa menehi akeh kesempatan kanggo nggarap input / output. Ana cukup akeh kelas sing ngleksanakake fungsi iki, mula kita dibagi dadi sawetara ceramah supaya sampeyan ora bingung ing wiwitan :) I/O ing Jawa.  Kelas FileInputStream, FileOutputStream, BufferedInputStream - 1Ing kuliah sadurunge kita ndemek BufferedReader , uga kelas abstrak InputStream & OutputStream lan sawetara. keturunan. Dina iki kita bakal ndeleng 3 kelas anyar: FileInputStream , FileOutputStream lan BufferedInputStream .

Kelas FileOutputStream

Tujuan utama kelas FileOutputStream yaiku nulis bita menyang file. Ora ana sing rumit :) FileOutputStream minangka salah sawijining implementasi kelas OutputStream abstrak . Ing konstruktor, obyek saka kelas iki njupuk path menyang file target (sing kudu ditulis bait) utawa obyek saka kelas File. Ayo katon ing loro conto:
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();
   }
}
Nalika nggawe obyek, Filekita nemtokake ing konstruktor path ngendi iku kudu dumunung. Ora perlu nggawe sadurunge: yen ora ana, program kasebut bakal nggawe dhewe. Sampeyan bisa nindakake tanpa nggawe obyek ekstra lan mung pass string karo alamat:
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();
   }
}
Asil ing loro kasus bakal padha. Kita bisa mbukak file lan ndeleng ing kono:

Hello! Добро пожаловать на JavaRush — лучший сайт для тех, кто хочет стать программистом!
Nanging, ana siji caveat ing kene. Coba mbukak kode saka conto ing ndhuwur kaping pirang-pirang saurutan, lan banjur katon ing file lan njawab pitakonan: carane akeh baris sampeyan ndeleng ditulis ing? Mung siji. Nanging sampeyan mbukak kode kaping pirang-pirang. Nanging, ternyata data kasebut ditindih saben wektu, ngganti sing lawas. Apa yen kita ora puas karo iki lan butuh rekaman urutan? Kepiye yen kita pengin nulis salam menyang file kaping telu berturut-turut? Kabeh iku prasaja ing kene. Wiwit basa dhewe ora bisa ngerti apa jenis prilaku kita kudu ing saben cilik, FileOutputStreamsampeyan bisa pass parameter tambahan kanggo konstruktor - boolean append. Yen nilaine bener , data kasebut bakal ditulis nganti pungkasan file. Yen palsu (lan nilai standar palsu ), data lawas bakal dibusak lan data anyar bakal ditulis. Ayo nyoba lan mbukak kode sing diowahi kaping telu:
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();
   }
}
Asil ing file:

Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
Hello! Добро пожаловать на JavaRush - лучший сайт для тех, кто хочет стать программистом!
Liyane bab! Elinga fitur iki nalika nggunakake kelas I/O. Ing siji wektu, aku kudu njagong kanggo jam ing tugas kanggo ngerti ngendi data lawas saka file :) Lan mesthi, kaya ing cilik saka kelas I / O liyane, aja lali babagan ngeculake sumber daya liwat close().

Kelas FileInputStream

Kelas kasebut nduweni FileInputStreamtujuan ngelawan - maca bita saka file. Kaya FileOutputStreamwarisan OutputStream, kelas iki asale saka kelas abstrak InputStream. Ayo nulis sawetara baris teks menyang teks " 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 ing Jawa.  Kelas FileInputStream, FileOutputStream, BufferedInputStream - 2 Iki minangka implementasine maca data saka file nggunakake 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);
       }
   }
}
Kita maca siji bait saka file, ngowahi bait diwaca menyang karakter lan output menyang console. Lan iki minangka asil ing konsol:

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

Kelas BufferedInputStream

Aku, diwenehi kawruh saka ceramah sadurunge, sampeyan bisa kanthi gampang ngomong apa kelas dibutuhake BufferedInputStreamlan apa kaluwihan wis liwat FileInputStream:) Kita wis ketemu karo buffered stream, supaya nyoba kanggo guess (utawa elinga) sadurunge nerusake maca :) Buffered streams dibutuhake utamane kanggo ngoptimalake I / O. Ngakses sumber data, kayata maca saka file, minangka operasi intensif kinerja. Lan ngakses file kanggo maca siji bait saben wektu boros. Mulane, BufferedInputStreammaca data ora siji byte ing wektu, nanging ing pamblokiran lan nyimpen kanggo sementara ing buffer khusus. Iki ngidini kita ngoptimalake operasi program kanthi nyuda jumlah akses menyang file kasebut. Ayo ndeleng kaya apa:
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);
       }
   }
}
Ing kene kita wis nggawe obyek BufferedInputStream. Iki nampa obyek utawa peneruse minangka input InputStream, mula sing sadurunge FileInputStreambakal ditindakake. Butuh ukuran buffer ing bita minangka parameter tambahan. Saiki, thanks kanggo iki, data bakal diwaca saka file ora siji byte ing wektu, nanging 200 ing wektu! Bayangake sepira kita wis nyuda jumlah akses file. Kanggo mbandhingake kinerja, sampeyan bisa njupuk sawetara file teks gedhe sawetara megabyte ing ukuran lan mbandhingaké suwene iku njupuk kanggo maca lan output menyang console ing milliseconds nggunakake FileInputStreamlan BufferedInputStream. Iki loro conto kode:
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()));
   }
}
Nalika maca file 1,5 MB ing komputer, FileInputStreamnindakake proyek ing ~ 3500 milliseconds, nanging ing kene BufferedInputStreamnindakake proyek ing ~ 1700 milliseconds. Nalika sampeyan bisa ndeleng, stream buffer optimized kinerja program dening 2 kaping! :) Kita bakal terus sinau kelas I/O - nganti ketemu!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION