วิธีทำงานกับไฟล์และอินพุต/เอาท์พุตใน Java
ที่มา:
สื่อ บท ช่วยสอนนี้จะอธิบายวิธีสร้าง อ่าน เขียน และลบไฟล์ใน Java คุณยังจะได้เรียนรู้ว่า คลาส File , InputStreamและOutputStream ทำงาน อย่างไร
การแนะนำ
ใน Java ไฟล์จะถูกแสดงโดยคลาส
File คลาส
Fileจัดเตรียมวิธีการสร้าง อ่าน เขียน และลบไฟล์ อินพุต/เอาต์พุต (I/O) คือกระบวนการถ่ายโอนข้อมูลระหว่างโปรแกรมและแหล่งข้อมูลภายนอก เช่น ไฟล์ ซ็อกเก็ตเครือข่าย หรือคอนโซล Java มีคลาสมากมายสำหรับอินพุต/เอาต์พุต รวมถึงคลาส
InputStreamและ
OutputStream
การสร้างไฟล์
หากต้องการสร้างไฟล์ คุณสามารถใช้ เมธอด File.createNewFile (
) มันจะสร้างไฟล์ใหม่หากไม่มีไฟล์ชื่อเดียวกันนี้ หากมีไฟล์ดังกล่าวอยู่แล้ว เมธอด createNewFile (
)จะส่ง
IOException ต่อไปนี้คือตัวอย่างวิธีสร้างไฟล์ใหม่ชื่อ
myfile.txtในไดเร็กทอรีปัจจุบัน:
File myFile = new File("myfile.txt");
myFile.createNewFile();
กำลังอ่านไฟล์
หากต้องการอ่านไฟล์ใน Java คุณสามารถใช้คลาส
FileInputStream มันมีวิธีการในการอ่านไบต์จากไฟล์ หากต้องการอ่านเนื้อหาของไฟล์ คุณควรใช้เมธอด
read() วิธีการนี้จะอ่านหนึ่งไบต์จากไฟล์และส่งกลับค่าของไบต์ ตัวอย่างเช่น รหัสต่อไปนี้อ่านเนื้อหาของไฟล์
myfile.txtและพิมพ์ลงในคอนโซล:
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();
ไฟล์บันทึก
หากต้องการเขียนลงไฟล์ คุณสามารถใช้คลาส
FileOutputStream มีวิธีการเขียนไบต์ลงในไฟล์ หากต้องการเขียนเนื้อหาของสตริงลงในไฟล์ ให้ใช้เมธอด
write() วิธีการนี้จะเขียนจำนวนไบต์ที่ระบุจากอาร์เรย์ที่ระบุไปยังไฟล์ นี่คือตัวอย่างวิธีการเขียนสตริง “Hello, world!” ไปยัง ไฟล์
myfile.txt :
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();
กำลังลบไฟล์
หากต้องการลบไฟล์ใน Java คุณควรใช้เมธอด
File.delete() หากไม่มีไฟล์ที่คุณต้องการลบ เมธอด
Delete()จะส่งกลับค่า
false นี่คือตัวอย่างโค้ดที่จะลบ ไฟล์
myfile.txt :
File myFile = new File("myfile.txt");
myFile.delete();
บทสรุป
ในโพสต์นี้ เราได้พูดคุยถึงพื้นฐานของการทำงานกับไฟล์และ I/O Java คุณได้เรียนรู้วิธีสร้าง อ่าน เขียน และลบไฟล์แล้ว คุณยังได้เรียนรู้เกี่ยวกับคลาส
Fileและ คลาส
InputStreamและ
OutputStream
เมธอดยูทิลิตี้ของคลาส Objects - วิธีทำงานกับเมธอดเหล่านั้น
ที่มา:
Inside Java ด้วยโพสต์นี้ คุณจะพัฒนาความรู้เกี่ยวกับวิธีการต่างๆ ที่มีอยู่ในคลาสObjects คลาส
Objectsใน Java มีวิธีการอรรถประโยชน์มากมายที่ทำให้ง่ายต่อการดำเนินการต่างๆ บนอ็อบเจ็กต์
คลาส Objectsได้รับการอัปเดตหลายครั้งใน JDK release : มีการอัปเดตที่สำคัญมากใน JDK 8 และ 9 และการอัปเดตเล็กน้อยใน JDK 16 และ 19 มาดูกันว่าคุณสามารถใช้คลาส
Objects ได้อย่างไร
การเปรียบเทียบวัตถุ
ออบเจ็กต์มีตัวเลือกมากมายสำหรับการเปรียบเทียบค่าของสองออบเจ็กต์ ประโยชน์หลักของการใช้
Objectsก็ คือความปลอดภัยจาก การเกิด
ค่าว่าง
เท่ากับ()
ด้านล่างนี้เป็นตัวอย่างของการเปรียบเทียบสองระเบียน
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);
ลึกเท่ากับ()
ใน คลาส
Objects คุณยังสามารถใช้ deepEquals()เพื่อเปรียบเทียบสองอาร์เรย์ได้ ซึ่งแตกต่าง จากปกติเท่ากับ
()สิ่งนี้จะเปรียบเทียบค่าที่เก็บไว้ในอาร์เรย์ซึ่งควรนำไปสู่ผลลัพธ์ที่สอดคล้องกันมากขึ้น โดยพื้นฐานแล้ววิธีนี้ต้องผ่าน
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);
เปรียบเทียบ()
วัตถุยังมี เมธอด
comparison()ซึ่งสามารถรับสองวัตถุและ
Comparator <T> วิธีการ
Compare()เป็นหนึ่งในไม่กี่ วิธี
null -unsafe ใน
Objectsเนื่องจากไม่มีการส่งคืนที่ยอมรับได้หากหนึ่งในอาร์กิวเมนต์เป็น
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());
สตริงและแฮชโค้ด
คลาสObjectsมีวิธีการแปลงวัตถุเป็นค่าStringและHashCode ข้อดีหลักของวิธีการเหล่า นี้ ก็คือ ปลอดภัยจาก เหตุการณ์ ที่เป็นโมฆะ
แปลงเป็นสตริง
วิธีหนึ่งที่น่าสนใจคือ
toString(obj, nullDefault)ซึ่งให้ค่าเริ่มต้นหากเกิดข้อผิดพลาด ซึ่งหมายความว่า
toIdentityString(obj)ส่งคืน
toString()และ
hashCode()ของอ็อบเจ็กต์ที่ส่งผ่านราวกับว่าไม่มีการเขียนทับวิธีการเหล่านี้
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);
แปลงเป็นแฮชโค้ด
ออบเจ็กต์ยังมีวิธีการแปลงออบเจ็กต์เป็นค่ารหัสแฮชด้วย
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);
กำลังตรวจสอบค่าว่าง
คลาส
Objects มีหลายวิธี ใน การตรวจสอบและจัดการ
null
การขว้าง NullPointException เป็น null
วิธีการ
needNonNull(obj)จะส่ง
NullPointExceptionหากค่าที่ส่งผ่านเป็น
null
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNull(runnerName);
time = Objects.requireNonNull(time);
}
}
การโยน NullPointException เป็น null พร้อมข้อความถึงผู้ใช้
เมธอด
needNonNull(obj, String) จะส่งข้อ ผิด พลาด
NullPointExceptionพร้อมข้อความถึงผู้ใช้หากค่าที่ส่งเป็น
null
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNull(runnerName, "runner name required!");
time = Objects.requireNonNull(time, "race time required!");
}
}
ส่งกลับค่าเริ่มต้นเป็นโมฆะ
เมธอด
needNonNullElse(obj, defaultValue)จะส่งคืน
defaultValue ที่ส่ง ผ่าน หาก
objเป็น
null
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
time = Objects.requireNonNullElse(time, Duration.ZERO);
}
}
การใช้ซัพพลายเออร์
คลาส
Objects ยังจัดให้มี เมธอด
needNonNull(obj, Supplier<String>)และ
T needNonNullElseGet(T, Supplier<T>)ซึ่งสามารถใช้เพื่อจัดเตรียมข้อความหรือค่าเริ่มต้น ควรใช้เฉพาะในกรณีที่การสร้างข้อความหรือค่าเริ่มต้นจะมีผลกระทบต่อประสิทธิภาพอย่างมาก
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);
}
}
การตรวจสอบค่าว่างเชิงคาดการณ์
ออบเจ็กต์มี การตรวจสอบ
ค่าว่างสำหรับใช้ในเพรดิเคต แม้ว่าจะสามารถใช้ในสถานการณ์อื่นได้เช่นกัน
record RaceTime(String runnerName, Duration time) {}
RaceTime nullValue = null;
Objects.nonNull(nullValue);
Objects.isNull(nullValue);
การตรวจสอบดัชนี
สุดท้ายนี้ คลาส
Objectsมีตัวเลือกมากมายสำหรับการตรวจสอบตำแหน่งดัชนีเมื่อสำรวจผ่าน
File ,
String ,
Collectionหรือวัตถุที่คล้ายกัน วิธีการเหล่านี้บางวิธีเพิ่งถูกเพิ่มลงใน 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