Home » Java » Java I/O dan Files Handling: Jenis dan Kegunaannya

Java I/O dan Files Handling: Jenis dan Kegunaannya

by Bagus Dharma Iswara
by Bagus Dharma Iswara

Penanganan file adalah bagian penting dari aplikasi apa pun. Java memiliki beberapa metode untuk membuat, membaca, memperbarui, dan menghapus file.

Java File Handling

Kelas File dari paket java.io, memungkinkan kita untuk bekerja dengan file. Untuk menggunakan kelas File, buat objek dari kelas tersebut, dan tentukan nama file atau nama direktori. Contohnya adalah dengan kode berikut

import java.io.File;  // Import the File class

File myObj = new File("filename.txt"); // Specify the filename

Kelas File memiliki banyak metode yang berguna untuk membuat dan mendapatkan informasi tentang file. Sebagai contohnya yaitu berada dalam tabel berikut

MethodTypeDescription
canRead ()BooleanMenguji apakah file dapat dibaca atau tidak
canWrite ()BooleanMenguji apakah file dapat ditulis atau tidak
createNewFile ()BooleanMembuat file kosong
delete ()BooleanMenghapus file
existing ()BooleanMenguji apakah file tersebut ada
getName ()StringMengembalikan nama file
getAbsolutePath ()StringMengembalikan nama path absolut dari file
length ()LongMengembalikan ukuran file dalam byte
list ()StringMengembalikan larik file dalam direktori
mkdir ()BooleanMembuat direktori

Membuat dan Menulis File pada Java

Membuat Sebuah File

Untuk membuat file di Java, Anda bisa menggunakan metode createNewFile (). Metode ini mengembalikan nilai boolean: true jika file berhasil dibuat, dan false jika file sudah ada. Perhatikan bahwa metode ini disertakan dalam blok coba … tangkap. Ini diperlukan karena ini melempar IOException jika terjadi kesalahan (jika file tidak dapat dibuat karena alasan tertentu) Contohnya adalah dengan menuliskan kode berikut

import java.io.File;  // Import the File class
import java.io.IOException;  // Import the IOException class to handle errors

public class CreateFile {
  public static void main(String[] args) {
    try {
      File myObj = new File("filename.txt");
      if (myObj.createNewFile()) {
        System.out.println("File created: " + myObj.getName());
      } else {
        System.out.println("File already exists.");
      }
    } catch (IOException e) {
      System.out.println("An error occurred.");
      e.printStackTrace();
    }
  }
} // Output yang akan dihasilkan yaitu : File created: filename.txt

Untuk membuat file dalam direktori tertentu (memerlukan izin), tentukan jalur file dan gunakan garis miring terbalik ganda untuk keluar dari karakter “\” (untuk Windows). Di Mac dan Linux Anda bisa menulis path, seperti: /Users/name/filename.txt. contohnya untuk membuat file bisa dilakukan dengan kode berikut

File myObj = new File("C:\\Users\\MyName\\filename.txt");

Menulis Kedalam File

Dalam contoh berikut, kami menggunakan kelas FileWriter bersama dengan metode write () untuk menulis beberapa teks ke file yang kami buat pada contoh di atas. Perhatikan bahwa ketika Anda selesai menulis ke file, Anda harus menutupnya dengan metode close (). Contoh sederhananya bisa kita lihat dengan menuliskan kode berikut

import java.io.FileWriter;   // Import the FileWriter class
import java.io.IOException;  // Import the IOException class to handle errors

public class WriteToFile {
  public static void main(String[] args) {
    try {
      FileWriter myWriter = new FileWriter("filename.txt");
      myWriter.write("Files in Java might be tricky, but it is fun enough!");
      myWriter.close();
      System.out.println("Successfully wrote to the file.");
    } catch (IOException e) {
      System.out.println("An error occurred.");
      e.printStackTrace();
    }
  }
} // Output yang dihasilkan adalah : Successfully wrote to the file.

Membaca File pada Java

Pada contoh berikut, kami menggunakan kelas Scanner untuk membaca konten file teks. Contoh agar kita dapat membaca file yaitu

import java.io.File;  // Import the File class
import java.io.FileNotFoundException;  // Import this class to handle errors
import java.util.Scanner; // Import the Scanner class to read text files

public class ReadFile {
  public static void main(String[] args) {
    try {
      File myObj = new File("filename.txt");
      Scanner myReader = new Scanner(myObj);
      while (myReader.hasNextLine()) {
        String data = myReader.nextLine();
        System.out.println(data);
      }
      myReader.close();
    } catch (FileNotFoundException e) {
      System.out.println("An error occurred.");
      e.printStackTrace();
    }
  }
} // Maka akan menghasilkan output berikut : Files in Java might be tricky, but it is fun enough!

Mendapatkan Informasi File

Untuk mendapatkan informasi selengkapnya tentang file, gunakan salah satu metode File. Contoh kode untuk mendapatkan informasi file yaitu

import java.io.File;  // Import the File class

public class GetFileInfo { 
  public static void main(String[] args) {
    File myObj = new File("filename.txt");
    if (myObj.exists()) {
      System.out.println("File name: " + myObj.getName());
      System.out.println("Absolute path: " + myObj.getAbsolutePath());
      System.out.println("Writeable: " + myObj.canWrite());
      System.out.println("Readable " + myObj.canRead());
      System.out.println("File size in bytes " + myObj.length());
    } else {
      System.out.println("The file does not exist.");
    }
  }
}

Output dari file diatas yaitu

File name: filename.txt
Absolute path: C:\Users\MyName\filename.txt
Writeable: true
Readable: true
File size in bytes: 0

Catatan: Ada banyak kelas yang tersedia di Java API yang dapat digunakan untuk membaca dan menulis file di Java: FileReader, BufferedReader, Files, Scanner, FileInputStream, FileWriter, BufferedWriter, FileOutputStream, dll. Yang mana yang akan digunakan bergantung pada versi Java Anda sedang mengerjakan dan apakah Anda perlu membaca byte atau karakter, dan ukuran file / baris dan lainnya.

Delete File pada Java

Menghapus File

Untuk menghapus file di Java, gunakan metode delete () yang dapat kita buat dengan kode berikut

import java.io.File;  // Import the File class

public class DeleteFile {
  public static void main(String[] args) { 
    File myObj = new File("filename.txt"); 
    if (myObj.delete()) { 
      System.out.println("Deleted the file: " + myObj.getName());
    } else {
      System.out.println("Failed to delete the file.");
    } 
  } 
} // output pada kode berikut adalah : Deleted the file: filename.txt

Menghapus Folder

Anda juga dapat menghapus folder. Namun, harus kosong terlebih dahulu untuk folder yang akan dihapus. Contoh kode untuk menghapus folder yaitu

import java.io.File; 

public class DeleteFolder {
  public static void main(String[] args) { 
    File myObj = new File("C:\\Users\\MyName\\Test"); 
    if (myObj.delete()) { 
      System.out.println("Deleted the folder: " + myObj.getName());
    } else {
      System.out.println("Failed to delete the folder.");
    } 
  } 
} // output yang dihasilkan yaitu : Deleted the folder: Test

Java I/O (Input / Output)

Java I / O (Input dan Output) digunakan untuk memproses input dan menghasilkan output. Java menggunakan konsep aliran untuk mempercepat operasi I / O. Paket java.io berisi semua kelas yang diperlukan untuk operasi input dan output. Kami dapat melakukan penanganan file di Java dengan Java I / O API.

Paket java.io berisi hampir setiap kelas yang mungkin Anda perlukan untuk melakukan input dan output (I / O) di Java. Semua aliran ini mewakili sumber masukan dan tujuan keluaran. Aliran dalam paket java.io mendukung banyak data seperti primitif, objek, karakter lokal.

Stream

Stream adalah urutan data. Di Java, aliran terdiri dari byte. Disebut aliran karena ibarat aliran air yang terus mengalir. Di Java, 3 stream dibuat untuk kita secara otomatis. Semua aliran ini terpasang dengan konsol.

  1. System.out: standard output stream.
  2. System.in: standard input stream.
  3. System.err: standard error stream.

Mari kita lihat kode untuk mencetak keluaran dan pesan kesalahan ke konsol.

System.out.println("simple message");  
System.err.println("error message");  

Mari kita lihat kode untuk mendapatkan masukan dari konsol.

int i=System.in.read();//returns ASCII code of 1st character  
System.out.println((char)i);//will print the character 

Stream dapat didefinisikan sebagai urutan data. Ada dua jenis stream yaitu

  1. InPutStream berarti digunakan untuk membaca data dari sumber.
  2. OutPutStream berarti digunakan untuk menulis data ke tujuan.

Java menyediakan dukungan yang kuat namun fleksibel untuk I / O yang terkait dengan file dan jaringan, tetapi tutorial ini mencakup fungsionalitas yang sangat mendasar yang terkait dengan aliran dan I / O. Kita akan melihat contoh yang paling umum digunakan satu per satu.

OutputStream vs InputStream

Penjelasan kelas OutputStream dan InputStream diberikan di bawah ini:

OutputStream

Aplikasi Java menggunakan aliran keluaran untuk menulis data ke tujuan; itu bisa berupa file, array, perangkat periferal atau soket.

InputStream

Aplikasi Java menggunakan aliran input untuk membaca data dari sumber; itu bisa berupa file, array, perangkat periferal atau soket.

Kelas OutputStream

Kelas OutputStream adalah kelas abstrak. Ini adalah superclass dari semua kelas yang mewakili aliran keluaran byte. Aliran keluaran menerima byte keluaran dan mengirimkannya ke beberapa sink. Metode yang berguna dari OutputStream yaitu

  • public void write(int)throws IOException, yaitu digunakan untuk menulis byte ke aliran keluaran saat ini.
  • public void write(byte[])throws IOException, yaitu digunakan untuk menulis array byte ke arus keluaran saat ini.
  • public void flush()throws IOException, yaitu membilas aliran keluaran saat ini.
  • public void close()throws IOException, yaitu digunakan untuk menutup aliran keluaran saat ini.

Kelas InputStream

Kelas InputStream adalah kelas abstrak. Ini adalah superclass dari semua kelas yang mewakili aliran input byte. Metode yang berguna dari InputStream yaitu

  • public abstract int read()throws IOException, yaitu untuk membaca byte data berikutnya dari aliran input. Ini mengembalikan -1 di akhir file.
  • public int available()throws IOException, yaitu untuk mengembalikan perkiraan jumlah byte yang dapat dibaca dari aliran input saat ini.
  • public void close()throws IOException, yaitu digunakan untuk menutup aliran input saat ini.

Byte Streams

Stream byte Java digunakan untuk melakukan input dan output byte 8-bit. Meskipun ada banyak kelas yang terkait dengan aliran byte tetapi kelas yang paling sering digunakan adalah, FileInputStream dan FileOutputStream. Berikut adalah contoh yang menggunakan kedua kelas ini untuk menyalin file input ke file output. Dapat kita lihat pada kode berikut

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {  
      FileInputStream in = null;
      FileOutputStream out = null;

      try {
         in = new FileInputStream("input.txt");
         out = new FileOutputStream("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

Sekarang mari kita memiliki file input.txt dengan isi konten berikut

This is test for copy file.

Sebagai langkah selanjutnya, kompilasi program di atas dan jalankan, yang akan menghasilkan file output.txt dengan konten yang sama seperti yang kita miliki di input.txt. Jadi mari kita letakkan kode di atas dalam file CopyFile.java dan lakukan hal berikut

$javac CopyFile.java
$java CopyFile

Character Stream

Stream Java Byte digunakan untuk melakukan input dan output byte 8-bit, sedangkan stream Karakter Java digunakan untuk melakukan input dan output untuk unicode 16-bit. Meskipun ada banyak kelas yang terkait dengan aliran karakter tetapi kelas yang paling sering digunakan adalah, FileReader dan FileWriter. Meskipun secara internal FileReader menggunakan FileInputStream dan FileWriter menggunakan FileOutputStream tetapi di sini perbedaan utamanya adalah FileReader membaca dua byte sekaligus dan FileWriter menulis dua byte sekaligus.

Kita dapat menulis ulang contoh ini, yang menggunakan kedua kelas ini untuk menyalin file input (memiliki karakter unicode) ke file output

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {
      FileReader in = null;
      FileWriter out = null;

      try {
         in = new FileReader("input.txt");
         out = new FileWriter("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

Sekarang mari kita memiliki file input.txt dengan konten berikut

This is test for copy file.

Sebagai langkah selanjutnya, kompilasi program di atas dan jalankan, yang akan menghasilkan file output.txt dengan konten yang sama seperti yang kita miliki di input.txt. Jadi mari kita letakkan kode di atas dalam file CopyFile.java dan lakukan hal berikut

$javac CopyFile.java
$java CopyFile

Standard Stream

Semua bahasa pemrograman menyediakan dukungan untuk I / O standar di mana program pengguna dapat mengambil input dari keyboard dan kemudian menghasilkan output di layar komputer. Jika Anda mengetahui bahasa pemrograman C atau C ++, maka Anda harus mengetahui tiga perangkat standar STDIN, STDOUT dan STDERR. Demikian pula, Java menyediakan tiga aliran standar berikut

  1. Standard Input yaitu Ini digunakan untuk memasukkan data ke program pengguna dan biasanya keyboard digunakan sebagai aliran input standar dan direpresentasikan sebagai System.in.
  2. Standard Output yaitu Ini digunakan untuk mengeluarkan data yang dihasilkan oleh program pengguna dan biasanya layar komputer digunakan untuk aliran keluaran standar dan direpresentasikan sebagai System.out.
  3. Standard Error yaitu Ini digunakan untuk mengeluarkan data kesalahan yang dihasilkan oleh program pengguna dan biasanya layar komputer digunakan untuk aliran kesalahan standar dan direpresentasikan sebagai System.err.

Berikut ini adalah program sederhana, yang membuat InputStreamReader untuk membaca aliran input standar sampai pengguna mengetik “q”

import java.io.*;
public class ReadConsole {

   public static void main(String args[]) throws IOException {
      InputStreamReader cin = null;

      try {
         cin = new InputStreamReader(System.in);
         System.out.println("Enter characters, 'q' to quit.");
         char c;
         do {
            c = (char) cin.read();
            System.out.print(c);
         } while(c != 'q');
      }finally {
         if (cin != null) {
            cin.close();
         }
      }
   }
}

Mari simpan kode di atas dalam file ReadConsole.java dan coba kompilasi dan jalankan seperti yang ditunjukkan pada program berikut. Program ini terus membaca dan mengeluarkan karakter yang sama sampai kita menekan ‘q’ yaitu akan menghasilkan hasil berikut

$javac ReadConsole.java
$java ReadConsole
Enter characters, 'q' to quit.
1
1
e
e
q
q

Direktori pada Java

Direktori adalah File yang dapat berisi daftar file dan direktori lain. Anda menggunakan objek File untuk membuat direktori, untuk membuat daftar file yang tersedia dalam direktori. Untuk detail lengkapnya, periksa daftar semua metode yang dapat Anda panggil pada objek File dan apa yang terkait dengan direktori.

Membuat Direktori

Ada dua metode utilitas File yang berguna, yang dapat digunakan untuk membuat direktori

  1. Metode mkdir () membuat direktori, mengembalikan nilai true pada keberhasilan dan false pada kegagalan. Kegagalan menunjukkan bahwa jalur yang ditentukan dalam objek File sudah ada, atau direktori tidak dapat dibuat karena seluruh jalur belum ada.
  2. Metode mkdirs () membuat direktori dan semua induk direktori.

Contoh berikut membuat direktori “/ tmp / user / java / bin”

import java.io.File;
public class CreateDir {

   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      
      // Create directory now.
      d.mkdirs();
   }
}

Kompilasi dan jalankan kode di atas untuk membuat “/ tmp / user / java / bin”.

Catatan – Java secara otomatis menangani pemisah jalur pada UNIX dan Windows sesuai konvensi. Jika Anda menggunakan garis miring (/) pada Java versi Windows, jalur akan tetap terselesaikan dengan benar.

Listing Direktori

Anda dapat menggunakan metode list () yang disediakan oleh objek File untuk membuat daftar semua file dan direktori yang tersedia dalam direktori sebagai berikut

import java.io.File;
public class ReadDir {

   public static void main(String[] args) {
      File file = null;
      String[] paths;
  
      try {      
         // create new file object
         file = new File("/tmp");

         // array of files and directory
         paths = file.list();

         // for each name in the path array
         for(String path:paths) {
            // prints filename and directory name
            System.out.println(path);
         }
      } catch (Exception e) {
         // if any error occurs
         e.printStackTrace();
      }
   }
}

Ini akan menghasilkan hasil berikut berdasarkan direktori dan file yang tersedia di direktori / tmp Anda

test1.txt
test2.txt
ReadDir.java
ReadDir.class

Kelas FileOutputStream pada Java

Java FileOutputStream adalah aliran keluaran yang digunakan untuk menulis data ke file. Jika Anda harus menulis nilai primitif ke dalam file, gunakan kelas FileOutputStream.

Anda dapat menulis data berorientasi byte serta berorientasi karakter melalui kelas FileOutputStream. Tapi, untuk data berorientasi karakter, lebih disukai menggunakan FileWriter daripada FileOutputStream.

Deklarasi Kelas FileOutputStream 

Mari kita lihat deklarasi untuk kelas Java.io.FileOutputStream

public class FileOutputStream extends OutputStream 

Metode pada FileOutputStream 

  • protected void finalize() yaitu Ini digunakan untuk membersihkan koneksi dengan aliran keluaran file.
  • void write(byte[] ary) yaitu Ini digunakan untuk menulis byte ary.length dari array byte ke aliran keluaran file.
  • void write(byte[] ary, int off, int len) yaitu Ini digunakan untuk menulis len byte dari array byte yang dimulai dari offset ke aliran keluaran file.
  • void write(int b) yaitu Ini digunakan untuk menulis byte yang ditentukan ke aliran keluaran file.
  • FileChannel getChannel() yaitu Ini digunakan untuk mengembalikan objek saluran file yang terkait dengan aliran keluaran file.
  • FileDescriptor getFD() yaitu Ini digunakan untuk mengembalikan deskriptor file yang terkait dengan aliran.
  • void close() yaitu Ini digunakan untuk menutup aliran keluaran file.

Contoh Menulis Byte FileOutputStream pada Java 

import java.io.FileOutputStream;  
public class FileOutputStreamExample {  
    public static void main(String args[]){    
           try{    
             FileOutputStream fout=new FileOutputStream("D:\\tesout.txt");
             fout.write(65);    
             fout.close();    
             System.out.println("success...");    
            }catch(Exception e){System.out.println(e);}    
      }    
}  // Maka akan menghasilkan output : Success...

Konten file teks testout.txt diatur dengan data A. Isi dari file testout.txt yaitu A.

Contoh Menulis String FileOutputStream pada Java 

import java.io.FileOutputStream;  
public class FileOutputStreamExample {  
    public static void main(String args[]){    
           try{    
             FileOutputStream fout=new FileOutputStream("D:\\testout.txt"); 
             String s="Java IO and File Handling.";    
             byte b[]=s.getBytes();//converting string into byte array  
             fout.write(b);    
             fout.close();    
             System.out.println("success...");    
            }catch(Exception e){System.out.println(e);}    
      }    
}  // Output yang muncul adalah : Success...

Konten dari file teks testout.txt diatur dengan data Java IO and File Handling. Isi dari file testout.txt yaitu Java IO and File Handling.

Kelas FileInputStream pada Java

Kelas FileInputStream Java memperoleh byte input dari file. Ini digunakan untuk membaca data berorientasi byte (aliran byte mentah) seperti data gambar, audio, video dan lainnya. Anda juga dapat membaca data aliran karakter. Namun, untuk membaca aliran karakter, disarankan untuk menggunakan kelas FileReader.

Deklarasi Kelas FileInputStream 

Mari kita lihat deklarasi untuk kelas java.io.FileInputStream yaitu

public class FileInputStream extends InputStream 

Metode pada FileInputStream 

  • int available() yaitu Ini digunakan untuk mengembalikan perkiraan jumlah byte yang dapat dibaca dari aliran input.
  • int read() yaitu Ini digunakan untuk membaca byte data dari aliran input.
  • int read(byte[] b) yaitu Ini digunakan untuk membaca hingga b. Byte panjang data dari aliran input.
  • int read(byte[] b, int off, int len) yaitu Ini digunakan untuk membaca hingga len byte data dari aliran input.
  • long skip(long x) yaitu Ini digunakan untuk melewati dan membuang x byte data dari aliran input.
  • FileChannel getChannel() yaitu Ini digunakan untuk mengembalikan objek FileChannel unik yang terkait dengan aliran input file.
  • FileDescriptor getFD () yaitu Ini digunakan untuk mengembalikan objek FileDescriptor.
  • protected void finalize () yaitu ini digunakan untuk memastikan bahwa metode tutup dipanggil ketika tidak ada lagi referensi ke aliran input file.
  • void close () yaitu Digunakan untuk menutup aliran

Contoh membaca karakter tunggal FileInputStream pada Java 

import java.io.FileInputStream;  
public class DataStreamExample {  
     public static void main(String args[]){    
          try{    
            FileInputStream fin=new FileInputStream("D:\\testout.txt");
             int i=fin.read();  
            System.out.print((char)i);    
  
            fin.close();    
          }catch(Exception e){System.out.println(e);}    
         }    
        }  

Catatan: Sebelum menjalankan kode, file teks dengan nama “testout.txt” harus dibuat. Dalam file ini, kami memiliki konten berikut Java IO and File Handling. Setelah menjalankan program di atas, Anda akan mendapatkan satu karakter dari file tersebut Untuk melihat teks, Anda perlu mengubahnya menjadi karakter. Outputnya adalah W

Contoh membaca seluruh karakter FileInputStream pada Java

import java.io.FileInputStream;  
public class DataStreamExample {  
     public static void main(String args[]){    
          try{    
            FileInputStream fin=new FileInputStream("D:\\testout.txt");
             int i=0;    
            while((i=fin.read())!=-1){    
             System.out.print((char)i);    
            }    
            fin.close();    
          }catch(Exception e){System.out.println(e);}    
         }    
        }  // outputnya adalah Java IO and File Handling

You may also like