Java - I/O Streams: Panduan untuk Pemula

Hai penyuka Java, yang ingin menjadi programmer! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia Java I/O Streams. Jangan khawatir jika kamu baru mengenal programming – saya akan menjadi pemandu kamu yang baik, dan kita akan membahas ini langkah demi langkah. Pada akhir tutorial ini, kamu akan dapat menguruskan fail dan stream seperti seorang professional!

Java - I/O Streams

Apa itu I/O Streams?

Sebelum kita kembali, mari kita faham apa itu I/O streams. Dalam Java, sebuah stream adalah sebuah urutan data. Bagian "I/O" adalah singkatan dari Input/Output. Jadi, I/O streams adalah cara Java menguruskan pembacaan dan penulisan ke berbagai sumber, seperti fail, sambungan jaringan, atau bahkan konsol.

Pikirkan tentang stream seperti Sungai data. Kamu bisa:

  1. Ambil air (data) dari Sungai (input stream)
  2. Letakkan air (data) ke Sungai (output stream)

Stream Standar

Java menyediakan tiga stream standar yang sudah diatur untuk kita:

  1. System.in (Input Stream)
  2. System.out (Output Stream)
  3. System.err (Error Output Stream)

Mari kita mulai dengan contoh sederhana:

import java.util.Scanner;

public class HelloStream {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Apa nama kamu? ");
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
scanner.close();
}
}

Dalam contoh ini, kita menggunakan System.in untuk membaca input dari pengguna, dan System.out untuk menampilkan output. Kelas Scanner membantu kita membaca dari input stream dengan mudah.

Membaca dan Menulis Fail

Sekarang, mari kita pindah ke hal yang lebih menarik – bekerja dengan fail!

Membaca dari Fail

Berikut ini cara kamu membaca dari sebuah fail:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("Kesalahan terjadi: " + e.getMessage());
}
}
}

Kode ini membaca fail bernama "example.txt" baris demi baris dan mencetak setiap baris ke konsol. Pernyataan try-with-resources memastikan bahwa fail ditutup dengan baik setelah kita selesai membaca.

Menulis ke Fail

Menulis ke fail juga sangat mudah:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterExample {
public static void main(String[] args) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("Hello, File I/O!");
writer.newLine();
writer.write("Ini adalah baris baru.");
} catch (IOException e) {
System.err.println("Kesalahan terjadi: " + e.getMessage());
}
}
}

Kode ini membuat fail baru bernama "output.txt" dan menulis dua baris kepadanya.

FileOutputStream

Kadang-kadang, kamu mungkin perlu menulis data biner ke fail. Itu saat FileOutputStream menjadi sangat berguna:

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("binary.dat")) {
byte[] data = {65, 66, 67, 68, 69}; // Nilai ASCII untuk A, B, C, D, E
fos.write(data);
} catch (IOException e) {
System.err.println("Kesalahan terjadi: " + e.getMessage());
}
}
}

Contoh ini menulis data biner ke fail bernama "binary.dat".

Navigasi dan I/O Fail

Java menyediakan kelas File untuk bekerja dengan path fail dan direktori. Berikut ini adalah contoh:

import java.io.File;

public class FileNavigationExample {
public static void main(String[] args) {
File file = new File("example.txt");
System.out.println("Fail ada: " + file.exists());
System.out.println("Nama fail: " + file.getName());
System.out.println("Path absolut: " + file.getAbsolutePath());
}
}

Kode ini menunjukkan cara mendapatkan informasi tentang fail menggunakan kelas File.

Direktori di Java

Bekerja dengan direktori sama seperti bekerja dengan fail. Mari lihat cara membuat direktori:

import java.io.File;

public class DirectoryExample {
public static void main(String[] args) {
File dir = new File("newDirectory");
if (dir.mkdir()) {
System.out.println("Direktori berhasil dibuat!");
} else {
System.out.println("Gagal membuat direktori.");
}
}
}

Kode ini membuat direktori baru bernama "newDirectory" di direktori kerja saat ini.

Menampilkan Isi Direktori

Akhirnya, mari lihat cara menampilkan isi sebuah direktori:

import java.io.File;

public class ListDirectoryExample {
public static void main(String[] args) {
File dir = new File(".");
String[] fileList = dir.list();
if (fileList != null) {
for (String fileName : fileList) {
System.out.println(fileName);
}
} else {
System.out.println("Direktori tidak ada atau bukan merupakan direktori.");
}
}
}

Kode ini menampilkan semua fail dan direktori di direktori saat ini.

Kesimpulan

Selamat! Kamu baru saja melakukan langkah pertamamu ke dunia Java I/O Streams. Kita telah membahas banyak hal, dari input/output dasar ke pengurusan fail dan operasi direktori. Ingat, praktek membuat perfect, jadi jangan segan untuk bereksperimen dengan konsep ini.

Berikut adalah tabel rujukan cepat tentang metode yang kita gunakan:

Metode Keterangan
Scanner.nextLine() Membaca baris teks dari input
BufferedReader.readLine() Membaca baris teks dari fail
BufferedWriter.write() Menulis string ke fail
BufferedWriter.newLine() Menulis pemisah baris ke fail
FileOutputStream.write() Menulis byte ke fail
File.exists() Memeriksa apakah fail ada
File.getName() Mendapatkan nama fail
File.getAbsolutePath() Mendapatkan path absolut fail
File.mkdir() Membuat direktori
File.list() Menampilkan isi direktori

Teruskan coding, teruskan belajar, dan yang paling penting, bersenang-senang! Ingat, setiap ahli pernah menjadi pemula. Selamat coding!

Credits: Image by storyset