JavaRush /Blog Jawa /Random-JV /Ngopi #229. Carane nggarap file lan Input/Output ing Jawa...

Ngopi #229. Carane nggarap file lan Input/Output ing Jawa. Metode Utilitas kelas Obyek

Diterbitake ing grup

Carane nggarap file lan Input/Output ing Jawa

Sumber: Sedheng Tutorial iki nerangake carane nggawe, maca, nulis lan mbusak file ing Jawa. Sampeyan uga bakal sinau carane kelas File , InputStream , lan OutputStream bisa digunakake . Ngopi #229.  Carane nggarap file lan Input/Output ing Jawa.  Metode Utilitas kelas Obyek - 1

Pambuka

Ing Jawa, file diwakili dening kelas File . Kelas File nyedhiyakake cara kanggo nggawe, maca, nulis, lan mbusak file. Input/output (I/O) yaiku proses transfer data antarane program lan sumber eksternal, kayata file, soket jaringan, utawa konsol. Jawa nyedhiyakake akeh kelas kanggo input/output, kalebu kelas InputStream lan OutputStream .

Nggawe file

Kanggo nggawe file, sampeyan bisa nggunakake cara File.createNewFile () . Bakal nggawe file anyar yen file kanthi jeneng sing padha durung ana. Yen file kasebut wis ana, metode createNewFile () bakal mbuwang IOException . Punika conto carane nggawe file anyar disebut myfile.txt ing direktori saiki:
File myFile = new File("myfile.txt");
myFile.createNewFile();

Maca file

Kanggo maca file ing Jawa, sampeyan bisa nggunakake kelas FileInputStream . Iki menehi cara kanggo maca bita saka file. Kanggo maca isi file, sampeyan kudu nggunakake cara maca () . Cara iki maca siji bait saka file lan ngasilake nilai bait kasebut. Contone, kode ing ngisor iki maca isi file myfile.txt lan nyithak menyang console:
File myFile = new File("myfile.txt");
FileInputStream inputStream = new FileInputStream(myFile);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
    System.out.print(new String(buffer, 0, bytesRead));
}
inputStream.close();

Ngrekam file

Kanggo nulis menyang file, sampeyan bisa nggunakake kelas FileOutputStream . Iki menehi cara kanggo nulis bita menyang file. Kanggo nulis isi string menyang file, gunakake metode write() . Cara iki nulis jumlah bita sing ditemtokake saka array sing ditemtokake menyang file. Punika conto carane senar "Hello, donya!"Ditulis. menyang file myfile.txt :
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();

Mbusak file

Kanggo mbusak file ing Jawa, sampeyan kudu nggunakake File.delete () cara . Yen file sing pengin dibusak ora ana, banjur delete() cara bakal bali false . Punika conto kode sing mbusak file myfile.txt :
File myFile = new File("myfile.txt");
myFile.delete();

Kesimpulan

Ing kirim iki, kita ngrembug babagan dhasar nggarap file lan I/O Java. Sampeyan sinau carane nggawe, maca, nulis, lan mbusak file. Sampeyan uga sinau babagan kelas File lan kelas InputStream lan OutputStream .

Metode Utilitas kelas Obyek - cara kerjane

Sumber: Ing Jawa Kanthi kiriman iki, sampeyan bakal nambah kawruh babagan macem-macem metode sing kasedhiya ing kelas Obyek . Kelas Obyek ing Jawa nduweni akeh cara utilitas sing ndadekake gampang nindakake macem-macem operasi ing obyek. Kelas Obyek wis ngalami sawetara nganyari ing rilis JDK : ana nganyari banget pinunjul ing JDK 8 lan 9, lan nganyari suntingan ing JDK 16 lan 19. Ayo kang katon ing carane sampeyan bisa nggunakake kelas Obyek .

Perbandingan obyek

Obyek nyedhiyakake sawetara opsi kanggo mbandhingake nilai saka rong obyek. Mupangat utama nggunakake implementasi Objects yaiku safety saka kedadeyan sing ora ana gunane .

padha ()

Ing ngisor iki minangka conto mbandhingake rong rekaman.
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime copyOfbilly =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));
nullValue.equals(billy);//NPE
Objects.equals(nullValue, billy);// false
Objects.equals(billy, nicolai);// false
Objects.equals(billy, copyOfbilly);// true

deepEquals()

Ing kelas Obyek , sampeyan uga bisa nggunakake deepEquals () kanggo mbandhingaké loro array . Ora kaya padha karo biasa () , iki bakal mbandhingake nilai sing disimpen ing array, sing kudu ngasilake asil sing luwih konsisten. Sejatine cara iki liwat Arrays.deepEquals () .
record RaceTime(String runnerName, Duration time) {}

RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

RaceTime[] raceTimes1 = new RaceTime[] { billy, nicolai };
RaceTime[] raceTimes2 = new RaceTime[] { billy, nicolai };

Objects.equals(raceTimes1, raceTimes2);// false
Objects.deepEquals(raceTimes1, raceTimes2);// true

mbandhingake ()

Obyek uga nduweni metode mbandhingake () , sing bisa njupuk rong obyek lan Comparator<T> . Cara mbandhingake () minangka salah siji saka sawetara metode null -unsafe ing Obyek amarga ora ana bali sing bisa ditampa yen salah sijine argumen kasebut null .
record RaceTime(String runnerName, Duration time) {}
class RaceTimeComparator implements Comparator<RaceTime> {
@Override
public int compare(RaceTime o1, RaceTime o2) {
	return o1.time.compareTo(o2.time);
}
}
RaceTime billy =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.compare(billy, nicolai, new RaceTimeComparator());//-1
Objects.compare(null, nicolai, new RaceTimeComparator());//NPE

String lan HashCode

Kelas Obyek nyedhiyakake cara kanggo ngowahi obyek dadi nilai String lan HashCode . Maneh, kauntungan utama saka metode kasebut yaiku aman saka kedadeyan null .

Ngonversi menyang String

Salah siji cara sing luwih menarik yaiku toString(obj, nullDefault) , sing menehi nilai standar yen ana kesalahan. Iki tegese toIdentityString (obj) ngasilake toString () lan hashCode () saka obyek sing dilewati kaya-kaya ora ana cara kasebut ditindih.
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.toString(billy);//RaceTime[runnerName=Billy Korando, time=PT1M30S]
Objects.toString(nullValue);//null
Objects.toString(nullValue, "Did not finish");//Did not finish
Objects.toIdentityString(billy);//ObjectsExamples$1RaceTime@251a69d7

Ngonversi menyang HashCode

Obyek uga menehi cara kanggo ngowahi obyek menyang nilai kode hash.
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
RaceTime billy =
	new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
	new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));

Objects.hashCode(nullValue);//0
Objects.hashCode(billy);//[HashValue]
Objects.hash(billy, nicolai);//[HashValue]

Priksa null

Kelas Obyek nyedhiyakake sawetara cara kanggo mriksa lan nangani null .

Mbuwang NullPointException ing null

Metode requireNonNull(obj) bakal mbuwang NullPointException yen nilai liwati null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName);
		time = Objects.requireNonNull(time);
	}
}

Mbuwang NullPointException ing null karo pesen kanggo pangguna

Metode requireNonNull(obj, String) bakal mbuwang kesalahan NullPointException kanthi pesen menyang pangguna yen nilai kasebut null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName, "runner name required!");
		time = Objects.requireNonNull(time, "race time required!");
	}
}

Bali nilai standar kanggo null

Metode requireNonNullElse(obj, defaultValue) bakal ngasilake defaultValue sing dilewati yen obj null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
		time = Objects.requireNonNullElse(time, Duration.ZERO);
	}
}

Nggunakake Suppliers

Kelas Obyek uga nyedhiyakake metode requireNonNull(obj, Supplier<String>) lan T requireNonNullElseGet(T, Supplier<T>) , sing bisa digunakake kanggo menehi pesen utawa nilai standar. Iki mung kudu digunakake yen nggawe pesen utawa nilai standar bakal duwe pengaruh kinerja sing signifikan.
record RaceTime(String runnerName, Duration time) {
static Supplier<String> noNameMsgSupplier = () -> "runner name required!";
static Supplier<String> noTimeMsgSupplier = () -> "race time required!";
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName, noNameMsgSupplier);
		time = Objects.requireNonNull(time, noTimeMsgSupplier);
	}
}
record RaceTime(String runnerName, Duration time) {
static Supplier<String> noNameValueSupplier = () -> "John Smith";
static Supplier<Duration> noTimeValueSupplier = () -> Duration.ZERO;
	RaceTime{
		runnerName = Objects.requireNonNullElseGet(runnerName, noNameValueSupplier);
		time = Objects.requireNonNullElseGet(time, noTimeValueSupplier);
	}
}

Priksa null prediktif

Obyek nyedhiyakake mriksa null kanggo digunakake ing predikat, sanajan bisa uga digunakake ing skenario liyane.
record RaceTime(String runnerName, Duration time) {}

RaceTime nullValue = null;
Objects.nonNull(nullValue);//false
Objects.isNull(nullValue);//true

Priksa indeks

Pungkasan, kelas Obyek nyedhiyakake sawetara opsi kanggo mriksa posisi indeks nalika ngliwati File , String , Koleksi , utawa obyek sing padha. Sawetara cara iki bubar ditambahake menyang JDK 16.
int checkIndex(int index, int length)

int checkFromToIndex(int fromIndex, int toIndex, int length)

int checkFromIndexSize(int fromIndex, int size, int length)

long checkIndex(long index, long length)

long checkFromToIndex(long fromIndex, long toIndex, long length)

long checkFromIndexSize(long fromIndex, long size, long length)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION