15-Lekciya
.pdfFayllar menen islew. Fayllardan oqıtıw hám fayllarǵa jazıw
Jobası:
Javada fayllar menen islesiwshi potoklar
FileWriter hám FileReader klassları
BufferedWriter hám BufferedReader klassları
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>
InputStre |
OutputStr |
FileReade |
FileWrite |
am |
eam |
r |
r |
FileInputSt |
FileOutputSt |
FileReade |
FileWrite |
ream |
ream |
r |
r |
BufferedInp |
BufferedOutp |
BufferedR |
BufferedW |
utStream |
utStream |
eader |
riter |
ByteArrayIn |
ByteArrayOut |
CharArray |
CharArray |
putStream |
putStream |
Reader |
Writer |
FilterInput |
FilterOutput |
FilterRea |
FilterWri |
Stream |
Stream |
der |
ter |
DataInputSt DataOutputSt
ream ream
ObjectInput ObjectOutput
Stream Stream
Javada fayllar menen islesiwshi potoklar
Kópshilik programmalastırıw tilleriniń tiykarǵı múmkinshilikleriniń biri bul fayllar hám potoklar menen islew bolıp tabıladı. Javada potoklar menen islewshi java.io paketi bar.
Bunda potok tiykarǵı túsiniklerden biri esaplanadı. Biraq programmalastırıwda “potok” birneshe kóplegen mánislerdi bildiredi. Al bul temada potoklar degende fayllar menen islew hám kiritiw-shıǵarıwdı (oqıtıwjazıw) kórip shıǵamız.
Potok Javadaǵı kiritiw-shıǵarıw sisteması arqalı real fizikalıq qurılmalar menen baylanısadı. Yaǵnıy bizde qandayda bir potok bolıp, ol arqalı biz faylǵa maǵlıwmat jazıw hám oqıtıwǵa, bunnan tısqarı tarmaq arqalı maǵlıwmat jiberiw hám qabıl etiwge boladı. Javada usınday fayllarǵa jazıw hám oqıw, tarmaq arqalı maǵlıwmat almasıw, konsolǵa maǵlıwmat kiritiw hám shıǵarıw sıyaqlı máseleler potoklar járdeminde sheshiledi.
Maǵlıwmatlardı oqıw ushın jaratılǵan obyekt – kiritiw potoki, al jazıw ushın jaratılǵanı shıǵarıw potoki delinedi.
Baytlardı basqarıw ushın arnalǵan barlıq klasslardıń tiykarında 2 abstrakt klass boladı. Olar: InputStream (kiritiw potoki) hám OutputStream (shıǵarıw potoki).
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>
Baytlar menen islew, hárdayim qolaylı bola bermeydi. Sonıń ushın simvollar potoki menen islew ushın arnalǵan 2 abstrakt klass bolıp, olar: Reader (simvollar potokin oqıw) hám Writer (simvollar potokin jazıw).
Potoklar menen islewshi qalǵan barlıq klasslar, joqarıda aytılǵan abstrakt klasslardıń miyrasxorı esaplanadı. Potoklar menen islewshi tiykarǵı klasslar tómendegi kestede keltirilgen.
InputStream |
OutputStream |
Reader |
Writer |
|
|
|
|
|
|
FileInputStream |
FileOutStream |
FileReader |
FileWriter |
|
|
|
|
|
|
BufferedInputStream |
BufferedOutStream |
BufferedReader |
BufferedWriter |
|
|
|
|
|
|
ByteArrayInputStream |
ByteArrayOutStream |
CharArrayReader |
CharArrayWriter |
|
|
|
|
|
|
FilterInputStream |
FilterOutputStream |
FilterReader |
FilterWriter |
|
|
|
|
|
|
DataInputStream |
DataOutStream |
|
|
|
|
|
|
|
|
ObjectInputStream |
ObjectOutStream |
|
|
|
|
|
|
|
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>
FileWriter hám FileReader klassları
Maǵlıwmatlardı tekstli fayllarǵa jazıw hám tekstli fayllardan oqıwda Javada FileWriter hám FileReader klasslarınan paydalanıladı. Bul klasslar sáykes túrde Writer hám Reader abstrakt klasslarınıń miyrasxorı esaplanadı.
FileWriter klası. FileWriter klası tekstli fayllarǵa jazıwda qollanıladı. Bul klass obyektin jaratıwda, tómendegi konstruktorlardan paydalanıwǵa boladı.
Konstruktorlar |
|
|
Wazıypası |
|
|
||
|
|
|
|
FileWriter(File file) |
|
File obyekti tiykarında taza obyekt jaratıladı. |
|
|
|
|
|
FileWriter(File |
file, |
boolean |
File obyekti hám append ózgeriwshileri tiykarında taza obyekt jaratıladı. |
append) |
|
|
Bunda append mánisi true bolsa, fayldıń izine jazıladı. Al false bolsa, fayl |
|
|
|
qayta jazıladı |
|
|
|
|
FileWriter(FileDescriptor fd) |
|
FileDescriptor obyekti járdeminde taza obyekt jaratadı. |
|
|
|
|
|
FileWriter(String fileName) |
|
fileName ózgeriwshisi tiykarında taza obyekt jaratıladı. Bunda fileName |
|
|
|
|
ózgeriwshisi fayl atı hám oǵan bolǵan joldı kórsetedi. |
|
|
|
|
FileWriter(String |
fileName, |
boolean |
filName hám append ózgeriwshisi tiykarında taza obyekt jaratıladı. Bunda |
append) |
|
|
fileName ózgeriwshisi fayl atı hám oǵan bolǵan joldı kórsetedi. Bunda |
|
|
|
append mánisi true bolsa, fayldıń izine jazıladı. Al false bolsa, fayl qayta |
|
|
|
jazıladı |
|
|
|
|
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>
Tómendegishe ápiwayı mısaldı qarayıq. Bunda “test.txt” faylına qanday da bir tekstti jazıw kerek bolsın. Programma kodı tómendegishe boladı.
import java.io.*; public class Program {
public static void main(String[] args) {
try(FileWriter writer = new FileWriter("test.txt", false))
{
// Barlıq tekstlerdi jazıw
String text = "Qandayda bir tekst…"; writer.write(text);
// taza qatar writer.append('\n');
// simvol jazıw writer.append('A'); writer.flush();
}
catch(IOException ex){ System.out.println(ex.getMessage());
}
}
}
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>
Bunda FileWriter writer = new FileWriter("test.txt", false) qatarı taza obyekt jaratadı. "test.txt" – faylǵa bolǵan jol hám fayl atın bildiredi. false – fayl qayta jazılıwın bildiredi. try catch bloki IOException qáteliginiń aldın alıw ushın qollanılǵan. writer.write(text) qatarı writer obyektine text qatarın qosadı. Tap usınday append() metodı writer obyektine simvoldı qosadı. writer.flush() metodı writer obyektin tazalaw ushın, ex.getMessage() metodı júz bergen IOExcepton haqqında xabar beriw ushın qollanıladı.
FileReader klası. FileReader klası tekstli fayllardan oqıw imkaniyatın beredi. Bul klass obyektin jaratıwda tómendegi konstruktorlardan birin paydalanıwǵa boladı.
Konstruktorlar |
Wazıypası |
|
FileReader(String fileName) |
String ózgeriwshisi tiykarında taza obyekt |
|
|
jaratıladı. Bunda fileName ózgeriwshisi fayl |
|
|
atı hám oǵan bolǵan joldı kórsetedi. |
|
FileReader(File file) |
File obyekti tiykarında taza obyekt jaratıladı. |
|
FileReader(FileDescriptor fd) |
FileDescriptor obyekti járdeminde taza |
|
|
obyekt jaratadı. |
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>
Tómendegishe ápiwayı mısaldı qarayıq. Bunda “test.txt” faylına jazılǵan tekstti oqıw kerek bolsın. Programma kodı tómendegishe boladı.
import java.io.*; public class Program {
public static void main(String[] args) {
try(FileReader reader = new FileReader("test.txt"))
{
// simvol boyınsha birme-bir oqıw int c; while((c=reader.read())!=-1){
System.out.print((char)c);
}
}
catch(IOException ex){ System.out.println(ex.getMessage());
}
}
}
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>
Bunda dáslep reader obyekti jaratıladı, onda "test.txt" – bul oqıtılıwı kerek bolǵan faylǵa bolǵan jol hám fayl atı reader.read() metodı fayldaǵı simvollardı birme-bir oqıydı hám sol simvoldıń kodın int tipinde qaytaradı. Eger metod -1 mánisin qaytarsa onda fayldaǵı simvollar tolıq oqılıp bolınǵanlıǵın bildiredi. while cikl operatorı reader.read() metodı -1 mánisin qaytarǵansha fayldaǵı simvollardı oqıydı. (char)c arqalı qaytadan simvolǵa aylandırıladı. try catch joqarıda aytılǵanday wazıypanı atqaradı.
Tekstli fayldan oqıtıwda simvollardı birme-bir emes, al simvollar massivi arqalı oqıtsaqta boladı. Bunda programma kodı tómendegishe boladı.
import java.io.*;
import java.util.Arrays; public class Program {
public static void main(String[] args) {
try(FileReader reader = new FileReader("test.txt"))
{
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>
char[] buf = new char[256]; int c;
while((c = reader.read(buf))>0){ if(c < 256){
buf = Arrays.copyOf(buf, c);
}
System.out.print(buf);
}
}
catch(IOException ex){ System.out.println(ex.getMessage());
}
}
}
Bunda fayldan buf massiv arqalı oqıtıladı. Yaǵnıy, bir waqıttıń ózinde 256 simvolǵa deyin oqıtılıwı múmkin. Eger faylda 256 simvoldan az bolsa (máselen 73 simvol), sol bólegi Arrays.copyOf() metodı arqalı ózine qayta nusqalanadı. Bunda fayldan oqıtılǵan simvollar ǵana qaladı.
</TITUNF></PI></PROGRAMMALASTIRIW I></A.B.ORINBAEV>