Paano magtrabaho sa mga file at Input/Output sa Java
Source:
Medium Ipinapaliwanag ng tutorial na ito kung paano gumawa, magbasa, magsulat at magtanggal ng mga file sa Java. Matututuhan mo rin kung paano gumagana ang mga klase ng File , InputStream , at OutputStream .
Panimula
Sa Java, ang mga file ay kinakatawan ng klase ng
File . Ang klase
ng File ay nagbibigay ng mga pamamaraan para sa paglikha, pagbabasa, pagsusulat, at pagtanggal ng mga file. Ang input/output (I/O) ay ang proseso ng paglilipat ng data sa pagitan ng isang program at isang panlabas na pinagmulan, tulad ng isang file, network socket, o console. Nagbibigay ang Java ng maraming klase para sa input/output, kabilang ang mga klase ng
InputStream at
OutputStream .
Paglikha ng mga file
Upang lumikha ng isang file, maaari mong gamitin ang paraan ng
File.createNewFile() . Gagawa ito ng bagong file kung wala pang file na may parehong pangalan. Kung mayroon nang ganoong file, ang
createNewFile() na paraan ay magtapon ng
IOException . Narito ang isang halimbawa kung paano gumawa ng bagong file na tinatawag na
myfile.txt sa kasalukuyang direktoryo:
File myFile = new File("myfile.txt");
myFile.createNewFile();
Nagbabasa ng mga file
Upang basahin ang isang file sa Java, maaari mong gamitin ang klase ng
FileInputStream . Nagbibigay ito ng mga pamamaraan para sa pagbabasa ng mga byte mula sa isang file. Upang basahin ang mga nilalaman ng isang file, dapat mong gamitin ang
read() method . Ang pamamaraang ito ay nagbabasa ng isang byte mula sa isang file at ibinabalik ang halaga ng byte. Halimbawa, binabasa ng sumusunod na code ang mga nilalaman ng file na
myfile.txt at ini-print ito sa 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();
Pagre-record ng mga file
Upang magsulat sa isang file, maaari mong gamitin ang klase ng
FileOutputStream . Nagbibigay ito ng mga pamamaraan para sa pagsulat ng mga byte sa isang file. Upang isulat ang mga nilalaman ng isang string sa isang file, gamitin ang
write() method . Ang pamamaraang ito ay nagsusulat ng tinukoy na bilang ng mga byte mula sa isang tinukoy na array sa isang file. Narito ang isang halimbawa kung paano isinulat ang string na “Hello, world!”. sa
myfile.txt file :
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();
Pagtanggal ng mga file
Upang magtanggal ng file sa Java, dapat mong gamitin ang
File.delete() na paraan . Kung ang file na gusto mong tanggalin ay wala, ang
delete() method ay magbabalik
ng false . Narito ang isang halimbawa ng code na nagtatanggal ng
myfile.txt file :
File myFile = new File("myfile.txt");
myFile.delete();
Konklusyon
Sa post na ito, tinalakay namin ang mga pangunahing kaalaman sa pagtatrabaho sa mga file at I/O Java. Natutunan mo kung paano gumawa, magbasa, magsulat, at magtanggal ng mga file. Natutunan mo rin ang tungkol sa klase
ng File at
ang mga klase ng InputStream at
OutputStream .
Mga pamamaraan ng utility ng klase ng Objects - kung paano magtrabaho sa kanila
Pinagmulan:
Inside Java Sa post na ito, mapapabuti mo ang iyong kaalaman sa iba't ibang pamamaraan na ibinigay sa klase ng Objects . Ang klase
ng Mga Bagay sa Java ay may maraming mga pamamaraan ng utility na nagpapadali sa pagsasagawa ng iba't ibang mga operasyon sa mga bagay.
Ang klase ng Objects ay sumailalim sa ilang mga update sa mga release ng JDK : nagkaroon ng napaka makabuluhang mga update sa JDK 8 at 9, at mga menor de edad na update sa JDK 16 at 19. Tingnan natin kung paano mo magagamit
ang klase ng Objects .
Paghahambing ng mga bagay
Ang mga bagay ay nagbibigay ng ilang mga pagpipilian para sa paghahambing ng mga halaga ng dalawang bagay. Ang pangunahing pakinabang ng paggamit ng pagpapatupad
ng Objects ay ang kaligtasan laban sa
mga null na pangyayari .
katumbas ng()
Nasa ibaba ang isang halimbawa ng paghahambing ng dalawang tala.
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()
Sa klase
ng Objects , maaari mo ring gamitin ang deepEquals() upang ihambing ang dalawang array . Hindi tulad ng regular
equals() , ito ay maghahambing ng mga halaga na nakaimbak sa mga array, na dapat humantong sa mas pare-parehong mga resulta. Sa pangkalahatan, ang pamamaraang ito ay dumadaan sa
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);
ihambing ()
Ang mga bagay ay mayroon ding
compare() na pamamaraan , na maaaring tumagal ng dalawang bagay at
isang Comparator<T> .
Ang compare() method ay isa sa ilang
null -unsafe na pamamaraan sa
Objects dahil wala itong katanggap-tanggap na return kung ang isa sa mga argumento nito ay
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());
String at HashCode
Ang klase ng Objects ay nagbibigay ng mga pamamaraan para sa pag-convert ng isang bagay sa mga halaga ng String at HashCode . Muli, ang pangunahing bentahe ng mga pamamaraang ito ay ang mga ito ay ligtas mula sa mga null na paglitaw .
I-convert sa String
Isa sa mga mas kawili-wiling pamamaraan ay
toString(obj, nullDefault) , na nagbibigay ng default na halaga kung may naganap na error. Nangangahulugan ito na ibinabalik ng
toIdentityString(obj) ang toString() at
hashCode() ng mga naipasa na bagay na parang wala sa mga pamamaraang ito ang na-overwrite.
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);
I-convert sa HashCode
Nagbibigay din ang Objects ng mga pamamaraan upang i-convert ang isang bagay sa halaga ng hash code nito.
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);
Sinusuri ang null
Ang klase
ng Objects ay nagbibigay ng ilang paraan para sa pagsuri at paghawak
ng null .
Ibinabato ang NullPointException sa null
Ang requireNonNull(obj) na paraan ay magtapon
ng NullPointException kung ang value na ipinasa ay
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNull(runnerName);
time = Objects.requireNonNull(time);
}
}
Ibinabato ang NullPointException sa null na may mensahe sa user
Ang requireNonNull(obj, String) na paraan ay magtapon ng
NullPointException error na may mensahe sa user kung ang value na ipinasa ay
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNull(runnerName, "runner name required!");
time = Objects.requireNonNull(time, "race time required!");
}
}
Ibalik ang default na halaga para sa null
Ang requireNonNullElse(obj, defaultValue) na paraan ay magbabalik ng naipasa
na defaultValue kung
ang obj ay
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
time = Objects.requireNonNullElse(time, Duration.ZERO);
}
}
Paggamit ng Mga Supplier
Nagbibigay din ang klase ng
Objects ng requireNonNull(obj, Supplier<String>) at
T requireNonNullElseGet(T, Supplier<T>) na mga pamamaraan , na maaaring magamit upang magbigay ng mensahe o isang default na halaga. Dapat lang gamitin ang mga ito kung magkakaroon ng malaking epekto sa performance ang paggawa ng mensahe o default na value.
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);
}
}
Predictive null check
Nagbibigay
ang Objects ng null checking para sa paggamit sa mga predicate, bagama't maaari rin itong magamit sa iba pang mga sitwasyon.
record RaceTime(String runnerName, Duration time) {}
RaceTime nullValue = null;
Objects.nonNull(nullValue);
Objects.isNull(nullValue);
Pagsusuri ng index
Sa wakas, ang klase
ng Objects ay nagbibigay ng ilang mga opsyon para sa pagsuri sa posisyon ng index kapag binabaybay
ang isang File ,
String ,
Collection , o katulad na bagay. Ang ilan sa mga pamamaraang ito ay idinagdag kamakailan sa 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)
GO TO FULL VERSION