CodeGym /Blog Jawa /Acak /Input/output ing Jawa. Kelas FileInputStream, FileOutputS...
John Squirrels
tingkat
San Francisco

Input/output ing Jawa. Kelas FileInputStream, FileOutputStream, lan BufferedInputStream

Diterbitake ing grup
"Hai! Ing wulangan dina iki, kita bakal nerusake obrolan babagan input lan output stream ing Jawa ( Java I / O ). Iki dudu pelajaran pertama babagan topik iki, lan mesthi ora bakal dadi sing terakhir Input/output ing Jawa.  Kelas FileInputStream, FileOutputStream, lan BufferedInputStream - 1:) mengkono, basa Jawa menehi akeh cara kanggo bisa karo I / O. Ana cukup sawetara kelas sing ngleksanakake fungsi iki, supaya kita wis dipérang dadi sawetara pawulangan — supaya sampeyan ora bakal bingung saka wiwitan :) pawulangan, kita kena ing BufferedReader, uga InputStreamkelas OutputStreamabstrak lan sawetara turunan Dina iki kita bakal nimbang 3 kelas anyar: FileInputStream,  FileOutputStream, lan  BufferedInputStream.

Kelas FileOutputStream

Tujuan utama kelas FileOutputStreamyaiku nulis bita menyang file. Ora ana sing rumit :) FileOutputStreamminangka salah sawijining implementasi OutputStreamkelas abstrak. Ing konstruktor, obyek saka kelas iki njupuk path menyang file target (ngendi bait kudu ditulis) utawa obyek File. Kita bakal nliti conto saben:

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 CodeGym — The best site for would-be programmers!"; 

       fileOutputStream.write(greetings.getBytes()); 
       fileOutputStream.close(); 
   } 
}
Nalika nggawe Fileobyek, kita ngliwati dalan sing dikarepake menyang konstruktor. Kita ora perlu nggawe luwih dhisik: yen ora ana, program bakal nggawe. Sampeyan uga bisa entuk tanpa nggawe obyek ekstra, mung ngliwati senar kanthi path:

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 CodeGym — The best site for would-be programmers!"; 

       fileOutputStream.write(greetings.getBytes()); 
       fileOutputStream.close(); 
   } 
} 
Asil ing loro kasus bakal padha. Kita bisa mbukak file lan ndeleng ing ngisor iki:

Hi! Welcome to CodeGym — The best site for would-be programmers!
Nanging ana siji nuansa ing kene. Coba mbukak kode saka conto ing ndhuwur kaping pirang-pirang saurutan. Banjur katon ing file lan jawab pitakonan iki: carane akeh baris iku? Mung siji. Nanging sampeyan mbukak kode kaping pirang-pirang. Pranyata data ditimpa saben wektu - sing lawas diganti sing anyar. Apa sing kudu ditindakake yen ora cocog karo kita lan kita kudu nulis kanthi urutan menyang file kasebut? Kepiye yen kita pengin nulis salam menyang file kaping telu berturut-turut? Kabeh iku prasaja banget. Amarga basa ora bisa ngerti prilaku apa sing dibutuhake ing saben kasus, contrucutor FileOutputStreambisa njupuk parameter tambahan -boolean append. Yen nilai kasebut bener, data kasebut bakal ditulis nganti pungkasan file. Yen palsu (lan minangka standar palsu), data lawas bakal dibusak lan diganti karo data anyar. Ayo priksa iki kanthi 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 CodeGym — The best site for would-be programmers!\r\n"; 

       fileOutputStream.write(greetings.getBytes()); 
       fileOutputStream.close(); 
   } 
} 
Isi berkas:

Hi! Welcome to CodeGym — The best site for would-be programmers! 
Hi! Welcome to CodeGym — The best site for would-be programmers! 
Hi! Welcome to CodeGym — The best site for would-be programmers!
Saiki wis beda! Aja lali babagan fitur iki nalika nggunakake kelas I/O. Ana wektu nalika aku ngentekake pirang-pirang jam kanggo tugas-tugas, otakku nganti pirang-pirang jam, nyoba ngerti kepiye dataku ilang saka file :) Lan mesthi, kaya kelas I / O liyane, aja lali nggunakake metode kasebut close(). kanggo sumber daya gratis.

Kelas FileInputStream

Tujuane FileInputStreamngelawan - maca bita saka file. Kaya FileOutputStreamwarisan OutputStream, kelas iki asale saka InputStreamkelas abstrak. Kita bakal nulis sawetara baris teks ing file " test.txt " kita:

"So close no matter how far 
Couldn't be much more from the heart 
Forever trusting who we are 
And nothing else matters"
Input/output ing Jawa.  Kelas FileInputStream, FileOutputStream, lan BufferedInputStream - 2Ing ngisor iki katon kaya 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 dadi karakter lan nampilake ing console. Lan iki output 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 pawulangan kepungkur, sampeyan bisa kanthi gampang ngomong apa kita kudu kelas BufferedInputStreamlan apa kaluwihan wis dibandhingake FileInputStream:) Kita wis nemokke buffered stream, supaya nyoba kanggo guess (utawa elinga) sadurunge sampeyan terus maca :) Aliran buffered dibutuhake utamane kanggo ngoptimalake I / O. Ngakses sumber data, kayata maca saka file, iku operasi larang ing syarat-syarat kinerja Lan kanggo ngakses file kanggo maca saben byte boros. Mulane BufferedInputStreammaca data ora siji byte ing wektu, nanging ing pamblokiran, lan nyimpen kanggo sementara ing buffer khusus. Iki ngidini kita ngoptimalake program kanthi nyuda kaping pindho kita ngakses file kasebut. Ayo ndeleng kaya apa iki:

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 nggawe BufferedInputStreamobyek. Konstruktor kasebut njupuk conto kelas InputStreamutawa turunane, mula FileInputStreambakal ditindakake. Minangka argumen tambahan, butuh ukuran buffer ing bita. Thanks kanggo argumentasi iki, data saiki bakal diwaca saka file ora siji bait sekaligus, nanging 200 bait sekaligus! Bayangake sepira kita wis nyuda jumlah akses file. Kanggo mbandhingaké kinerja, sampeyan bisa njupuk file teks gedhe (sawetara megabyte teks) lan mbandhingaké suwene iku njupuk ing milliseconds diwaca lan output kanggo console nggunakake FileInputStreamlan BufferedInputStream. Iki kode sing nduduhake loro opsi:

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, FileInputStreamrampung karya ing ~ 3500 milliseconds, nanging BufferedInputStreamngatur ing ~ 1700 milliseconds. Nalika sampeyan bisa ndeleng, stream buffer optimized karya, Cut ing setengah! :) Kita bakal terus sinau kelas I/O — nganti ketemu!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION