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 .
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);
Objects.equals(nullValue, billy);
Objects.equals(billy, nicolai);
Objects.equals(billy, copyOfbilly);
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);
Objects.deepEquals(raceTimes1, raceTimes2);
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());
Objects.compare(null, nicolai, new RaceTimeComparator());
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);
Objects.toString(nullValue);
Objects.toString(nullValue, "Did not finish");
Objects.toIdentityString(billy);
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);
Objects.hashCode(billy);
Objects.hash(billy, nicolai);
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);
Objects.isNull(nullValue);
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)
GO TO FULL VERSION