unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
I/O

I/O #

Penanganan I/O (Input/Output) dalam Java melibatkan pembacaan dan penulisan data dari dan ke berbagai sumber seperti file, jaringan, dan perangkat lainnya. Java menyediakan berbagai kelas dan pustaka untuk menangani operasi I/O, baik untuk I/O berbasis byte (seperti file binary) maupun berbasis karakter (seperti file teks). Berikut adalah penjelasan mendetail mengenai penanganan I/O di Java dan contoh penggunaannya.

I/O Berbasis Byte #

I/O berbasis byte umumnya digunakan untuk menangani data biner, seperti gambar atau file biner lainnya.

File Input/Output #

Membaca dari File #

Untuk membaca data dari file, Anda dapat menggunakan kelas FileInputStream:

import java.io.FileInputStream;
import java.io.IOException;

public class FileReadExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("example.bin")) {
            int byteData;
            while ((byteData = fis.read()) != -1) {
                System.out.print((char) byteData); // Menampilkan byte sebagai karakter
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Untuk menulis data ke file, Anda dapat menggunakan kelas FileOutputStream:

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

public class FileWriteExample {
    public static void main(String[] args) {
        try (FileOutputStream fos = new FileOutputStream("example.bin")) {
            String data = "Hello, world!";
            fos.write(data.getBytes()); // Menulis byte ke file
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

I/O Berbasis Karakter #

I/O berbasis karakter digunakan untuk menangani data teks dan lebih mudah digunakan untuk file yang berisi teks.

File Input/Output #

Membaca dari File #

Untuk membaca teks dari file, Anda dapat menggunakan kelas FileReader dan BufferedReader:

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

public class FileReadTextExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line); // Menampilkan baris per baris
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Untuk menulis teks ke file, Anda dapat menggunakan kelas FileWriter dan BufferedWriter:

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

public class FileWriteTextExample {
    public static void main(String[] args) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"))) {
            String data = "Hello, world!";
            bw.write(data); // Menulis teks ke file
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

I/O Jaringan #

Java menyediakan kelas untuk melakukan operasi I/O melalui jaringan, seperti Socket dan ServerSocket.

Menggunakan Socket #

Socket digunakan untuk komunikasi antara klien dan server.

Klien Socket #

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 12345);
             PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {

            out.println("Hello, server!");
            String response = in.readLine();
            System.out.println("Server response: " + response);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Server Socket #

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(12345);
             Socket clientSocket = serverSocket.accept();
             BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
             PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()), true)) {

            String message = in.readLine();
            System.out.println("Received from client: " + message);
            out.println("Hello, client!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Penanganan Stream #

Java juga memiliki kelas untuk penanganan stream yang lebih kompleks seperti ObjectInputStream dan ObjectOutputStream untuk objek yang dapat di-serialisasi.

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

public class ObjectWriteExample {
    public static void main(String[] args) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
            Person person = new Person("Alice", 30);
            oos.writeObject(person);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Membaca Objek dari Stream #

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectReadExample {
    public static void main(String[] args) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
            Person person = (Person) ois.readObject();
            System.out.println(person);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

import java.io.Serializable;

public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

Kesimpulan #

Penanganan I/O dalam Java mencakup berbagai operasi seperti membaca dan menulis file, komunikasi jaringan, dan penanganan objek yang dapat di-serialisasi. Java menyediakan berbagai kelas untuk berbagai kebutuhan I/O, termasuk:

  • I/O Berbasis Byte: Kelas FileInputStream dan FileOutputStream.
  • I/O Berbasis Karakter: Kelas FileReader dan FileWriter.
  • I/O Jaringan: Kelas Socket dan ServerSocket.
  • Penanganan Stream: Kelas ObjectInputStream dan ObjectOutputStream.

Memahami dan menggunakan kelas-kelas ini dengan baik akan membantu dalam menangani berbagai tugas I/O dalam aplikasi Java Anda.

« Multi Threading
Socket »