JavaRush /Blog Java /Random-MS /Coffee break #229. Bagaimana untuk bekerja dengan fail da...

Coffee break #229. Bagaimana untuk bekerja dengan fail dan Input/Output dalam Java. Kaedah utiliti kelas Objek

Diterbitkan dalam kumpulan

Bagaimana untuk bekerja dengan fail dan Input/Output dalam Java

Sumber: Sederhana Tutorial ini menerangkan cara membuat, membaca, menulis dan memadam fail dalam Java. Anda juga akan mempelajari cara kelas Fail , InputStream dan OutputStream berfungsi . Coffee break #229.  Bagaimana untuk bekerja dengan fail dan Input/Output dalam Java.  Kaedah utiliti kelas Objek - 1

pengenalan

Di Java, fail diwakili oleh kelas Fail . Kelas Fail menyediakan kaedah untuk mencipta, membaca, menulis dan memadam fail. Input/output (I/O) ialah proses pemindahan data antara program dan sumber luaran, seperti fail, soket rangkaian atau konsol. Java menyediakan banyak kelas untuk input/output, termasuk kelas InputStream dan OutputStream .

Mencipta fail

Untuk mencipta fail, anda boleh menggunakan kaedah File.createNewFile() . Ia akan mencipta fail baharu jika fail dengan nama yang sama belum wujud. Jika fail sedemikian sudah wujud, kaedah createNewFile() akan membuang IOException . Berikut ialah contoh cara membuat fail baharu yang dipanggil myfile.txt dalam direktori semasa:
File myFile = new File("myfile.txt");
myFile.createNewFile();

Membaca fail

Untuk membaca fail dalam Java, anda boleh menggunakan kelas FileInputStream . Ia menyediakan kaedah untuk membaca bait daripada fail. Untuk membaca kandungan fail, anda harus menggunakan kaedah read() . Kaedah ini membaca satu bait daripada fail dan mengembalikan nilai bait tersebut. Sebagai contoh, kod berikut membaca kandungan fail myfile.txt dan mencetaknya ke konsol:
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();

Merakam fail

Untuk menulis ke fail, anda boleh menggunakan kelas FileOutputStream . Ia menyediakan kaedah untuk menulis bait ke fail. Untuk menulis kandungan rentetan pada fail, gunakan kaedah write() . Kaedah ini menulis bilangan bait yang ditentukan daripada tatasusunan yang ditentukan kepada fail. Berikut ialah contoh cara rentetan "Hello, dunia!" ditulis. ke fail myfile.txt :
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();

Memadam fail

Untuk memadam fail dalam Java, anda harus menggunakan kaedah File.delete() . Jika fail yang anda ingin padamkan tidak wujud, maka kaedah delete() akan mengembalikan false . Berikut ialah contoh kod yang memadamkan fail myfile.txt :
File myFile = new File("myfile.txt");
myFile.delete();

Kesimpulan

Dalam siaran ini, kami membincangkan asas bekerja dengan fail dan I/O Java. Anda belajar cara membuat, membaca, menulis dan memadam fail. Anda juga mempelajari tentang kelas Fail dan kelas InputStream dan OutputStream .

Kaedah utiliti kelas Objek - cara bekerja dengannya

Sumber: Inside Java Dengan siaran ini, anda akan meningkatkan pengetahuan anda tentang pelbagai kaedah yang disediakan dalam kelas Objek . Kelas Objek dalam Java mempunyai banyak kaedah utiliti yang memudahkan untuk melaksanakan pelbagai operasi pada objek. Kelas Objects telah mengalami beberapa kemas kini dalam keluaran JDK : terdapat kemas kini yang sangat ketara dalam JDK 8 dan 9, dan kemas kini kecil dalam JDK 16 dan 19. Mari lihat bagaimana anda boleh menggunakan kelas Objects .

Perbandingan objek

Objek menyediakan beberapa pilihan untuk membandingkan nilai dua objek. Faedah utama menggunakan pelaksanaan Objects ialah keselamatan terhadap kejadian nol .

sama dengan()

Di bawah ialah contoh membandingkan dua rekod.
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()

Dalam kelas Objects , anda juga boleh menggunakan deepEquals() untuk membandingkan dua tatasusunan . Tidak seperti regular equals() , ini akan membandingkan nilai yang disimpan dalam tatasusunan, yang sepatutnya membawa kepada hasil yang lebih konsisten. Pada asasnya kaedah ini melalui 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

bandingkan()

Objek juga mempunyai kaedah compare() , yang boleh mengambil dua objek dan Comparator<T> . Kaedah compare() adalah salah satu daripada beberapa kaedah null -unsafe dalam Objects kerana ia tidak mempunyai pulangan yang boleh diterima jika salah satu hujahnya adalah 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

Rentetan dan Kod Hash

Kelas Objects menyediakan kaedah untuk menukar objek kepada nilai String dan HashCode . Sekali lagi, kelebihan utama kaedah ini ialah ia selamat daripada kejadian nol .

Tukar kepada String

Salah satu kaedah yang lebih menarik ialah toString(obj, nullDefault) , yang menyediakan nilai lalai jika ralat berlaku. Ini bermakna bahawa toIdentityString(obj) mengembalikan toString() dan hashCode() objek yang diluluskan seolah-olah tiada kaedah ini telah ditimpa.
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

Tukar kepada HashCode

Objek juga menyediakan kaedah untuk menukar objek kepada nilai kod cincangnya.
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]

Menyemak nol

Kelas Objects menyediakan beberapa kaedah untuk menyemak dan mengendalikan null .

Membuang NullPointException pada null

Kaedah requireNonNull(obj) akan membuang NullPointException jika nilai yang diluluskan adalah null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName);
		time = Objects.requireNonNull(time);
	}
}

Melontar NullPointException pada null dengan mesej kepada pengguna

Kaedah requireNonNull(obj, String) akan membuang ralat NullPointException dengan mesej kepada pengguna jika nilai yang diluluskan adalah null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNull(runnerName, "runner name required!");
		time = Objects.requireNonNull(time, "race time required!");
	}
}

Kembalikan nilai lalai untuk null

Kaedah requireNonNullElse(obj, defaultValue) akan mengembalikan defaultValue yang diluluskan jika obj adalah null .
record RaceTime(String runnerName, Duration time) {
	RaceTime{
		runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
		time = Objects.requireNonNullElse(time, Duration.ZERO);
	}
}

Menggunakan Pembekal

Kelas Objects juga menyediakan kaedah requireNonNull(obj, Supplier<String>) dan T requireNonNullElseGet(T, Supplier<T>) , yang boleh digunakan untuk menyediakan mesej atau nilai lalai. Ia hanya boleh digunakan jika membuat mesej atau nilai lalai akan mempunyai kesan prestasi yang ketara.
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);
	}
}

Semakan nol ramalan

Objek menyediakan semakan nol untuk digunakan dalam predikat, walaupun ia boleh digunakan dalam senario lain juga.
record RaceTime(String runnerName, Duration time) {}

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

Semakan indeks

Akhir sekali, kelas Objects menyediakan beberapa pilihan untuk menyemak kedudukan indeks apabila melintasi File , String , Collection , atau objek yang serupa. Beberapa kaedah ini telah ditambahkan pada JDK 16 baru-baru ini.
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)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION