Friday 25 September 2015

Java - Files and I/O

Java.io package mengandung hampir setiap kelas Anda mungkin merasa perlu untuk melakukan input dan output (I / O) di Java. Semua sungai-sungai ini merupakan sumber input dan tujuan output. Aliran dalam paket java.io mendukung banyak data seperti primitif, Obyek, karakter lokal, dll

aliran
Sebuah sungai dapat didefinisikan sebagai urutan data. ada dua jenis Streaming

InputStream: The InputStream digunakan untuk membaca data dari sumber.

OutputStream: OutputStream digunakan untuk menulis data ke tujuan.



Java menyediakan dukungan yang kuat namun fleksibel untuk I / O terkait dengan File dan jaringan tapi tutorial ini meliputi fungsi yang sangat dasar yang berhubungan dengan sungai dan I / O. Kami akan lihat paling sering digunakan misalnya satu per satu:

byte Streaming
Stream Java byte digunakan untuk melakukan input dan output dari 8-bit byte. Meskipun ada banyak kelas yang berkaitan dengan byte stream tapi kelas yang paling sering digunakan adalah, FileInputStream dan FileOutputStream. Berikut adalah contoh yang menggunakan dua kelas ini untuk menyalin file input menjadi output file:

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 input.txt file dengan isi sebagai berikut:

This is test for copy file.

Sebagai langkah berikutnya, mengkompilasi program di atas dan jalankan, yang akan menghasilkan dalam menciptakan output.txt file dengan konten yang sama seperti yang kita miliki di input.txt. Jadi mari kita menempatkan kode di atas dalam file CopyFile.java dan lakukan hal berikut:

$javac CopyFile.java
$java CopyFile

karakter Streaming
Java Byte stream yang digunakan untuk melakukan input dan output dari 8-bit byte, di mana sebagai Java aliran Character digunakan untuk melakukan input dan output untuk 16-bit unicode. Meskipun ada banyak kelas yang berkaitan dengan karakter aliran tetapi yang paling sering digunakan adalah kelas, FileReader dan FileWriter .. meskipun internal FileReader menggunakan FileInputStream dan FileWriter menggunakan FileOutputStream tapi di sini perbedaan utama adalah bahwa FileReader membaca dua byte pada satu waktu dan FileWriter menulis dua byte di sebuah waktu.

Kita bisa menulis ulang contoh di atas yang menggunakan dua kelas ini untuk menyalin file input (memiliki karakter unicode) menjadi 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 input.txt file dengan isi sebagai berikut:

This is test for copy file.

Sebagai langkah berikutnya, mengkompilasi program di atas dan jalankan, yang akan menghasilkan dalam menciptakan output.txt file dengan konten yang sama seperti yang kita miliki di input.txt. Jadi mari kita menempatkan kode di atas dalam file CopyFile.java dan lakukan hal berikut:

$javac CopyFile.java
$java CopyFile

Standard Streaming
Semua bahasa pemrograman menyediakan dukungan untuk standar I / O di mana program pengguna dapat mengambil input dari keyboard dan kemudian menghasilkan output pada layar komputer. Jika Anda menyadari jika C atau C ++ bahasa pemrograman, maka Anda harus menyadari tiga perangkat standar STDIN, stdout dan stderr. Cara yang sama Java menyediakan berikut tiga aliran standar

Standar Input: ini digunakan untuk memberi makan data ke program pengguna dan biasanya keyboard digunakan sebagai masukan standar dan direpresentasikan sebagai System.in.

Standar Output: Ini digunakan untuk output data yang dihasilkan oleh program pengguna dan biasanya layar komputer digunakan untuk output stream standar dan direpresentasikan sebagai System.out.

Standar Kesalahan: ini digunakan untuk output data error yang dihasilkan oleh program pengguna dan biasanya layar komputer yang digunakan untuk stream kesalahan standar dan direpresentasikan sebagai System.err.

Berikut ini adalah program sederhana yang menciptakan InputStreamReader untuk membaca masukan standar sampai pengguna jenis "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 kita menjaga kode di atas dalam ReadConsole.java berkas dan mencoba untuk mengkompilasi dan mengeksekusi sebagai berikut. Program ini terus membaca dan keluaran karakter yang sama sampai kita tekan 'q':

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

Membaca dan Menulis File:
Seperti dijelaskan sebelumnya, aliran dapat didefinisikan sebagai urutan data. InputStream digunakan untuk membaca data dari sumber dan OutputStream digunakan untuk menulis data ke tujuan.

Berikut ini adalah hirarki kelas untuk menangani Input dan Output stream.



Dua aliran penting adalah FileInputStream dan FileOutputStream, yang akan dibahas dalam tutorial ini:

FileInputStream:
Aliran ini digunakan untuk membaca data dari file. Benda dapat dibuat dengan menggunakan kata kunci baru dan ada beberapa jenis konstruktor tersedia.

Setelah konstruktor mengambil nama file sebagai string untuk membuat obyek input stream untuk membaca file .:

InputStream f = new FileInputStream("C:/java/hello");

Setelah konstruktor mengambil file objek untuk membuat sebuah objek untuk membaca file input stream. Pertama kita membuat objek file menggunakan File () metode sebagai berikut:

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

Setelah Anda memiliki objek InputStream di tangan, maka ada daftar metode pembantu yang dapat digunakan untuk membaca untuk streaming atau melakukan operasi lain pada sungai.


1 public void close () throws IOException {}
Metode ini menutup aliran file output. Pers sumber daya sistem yang berhubungan dengan file. Melempar IOException.

2 protected void finalize () throws IOException {}
Metode ini membersihkan koneksi ke file. Memastikan bahwa metode penutupan berkas ini output stream disebut ketika tidak ada lagi referensi ke sungai ini. Melempar IOException.

3 public int read (int r) throws IOException {}
Metode ini membaca byte tertentu dari data dari InputStream. Mengembalikan sebuah int. Mengembalikan byte berikutnya data dan -1 akan dikembalikan jika itu akhir file.

4 public int read (byte [] r) throws IOException {}
Metode ini membaca byte r.length dari masukan ke dalam sebuah array. Mengembalikan jumlah byte yang dibaca. Jika akhir file -1 akan dikembalikan.

5 public int available() throws IOException {}
Memberikan jumlah byte yang dapat dibaca dari input stream file ini. Mengembalikan sebuah int.

Ada masukan penting lainnya stream yang tersedia, untuk lebih detail Anda dapat merujuk pada link berikut:

ByteArrayInputStream

DataInputStream

FileOutputStream:
FileOutputStream digunakan untuk membuat file dan menulis data ke dalamnya. Sungai akan menciptakan sebuah file, jika tidak sudah ada, sebelum membukanya untuk output.

Berikut adalah dua konstruktor yang dapat digunakan untuk membuat objek FileOutputStream.

Setelah konstruktor mengambil nama file sebagai string untuk membuat obyek input stream untuk menulis file:

OutputStream f = new FileOutputStream("C:/java/hello") 

Setelah konstruktor mengambil file objek untuk membuat sebuah objek output stream untuk menulis file. Pertama, kita membuat objek file menggunakan File () metode sebagai berikut:

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

Ada aliran keluaran penting lain yang tersedia, untuk lebih detail Anda dapat merujuk pada link berikut:

ByteArrayOutputStream

DataOutputStream

contoh:
Berikut adalah contoh untuk menunjukkan InputStream dan OutputStream:

import java.io.*;

public class fileStreamTest{

   public static void main(String args[]){
   
   try{
      byte bWrite [] = {11,21,3,40,5};
      OutputStream os = new FileOutputStream("test.txt");
      for(int x=0; x < bWrite.length ; x++){
         os.write( bWrite[x] ); // writes the bytes
      }
      os.close();
     
      InputStream is = new FileInputStream("test.txt");
      int size = is.available();

      for(int i=0; i< size; i++){
         System.out.print((char)is.read() + "  ");
      }
      is.close();
   }catch(IOException e){
      System.out.print("Exception");
   } 
   }
}

Kode di atas akan membuat file test.txt dan akan menulis angka yang diberikan dalam format biner. Sama akan menjadi output pada layar stdout.

Berkas Navigasi dan I / O:
Ada beberapa kelas lain yang kita akan pergi melalui untuk mengenal dasar-dasar Berkas Navigasi dan I / O.

File Kelas

FileReader Kelas

FileWriter Kelas

Direktori di Jawa:
Direktori adalah File yang dapat berisi daftar file dan direktori. Anda menggunakan objek File untuk membuat direktori, daftar ke file yang tersedia di direktori. Untuk detail lengkap memeriksa daftar semua metode yang dapat Anda memanggil objek File dan apa yang berhubungan dengan direktori.

Membuat Direktori:
Ada dua metode utilitas Berkas berguna, yang dapat digunakan untuk membuat direktori:

 mkdir () metode menciptakan sebuah direktori, kembali benar pada keberhasilan dan palsu pada kegagalan. Kegagalan menunjukkan bahwa jalur yang ditetapkan dalam objek File sudah ada, atau direktori tidak dapat dibuat karena seluruh jalan belum ada.

mkdirs () metode menciptakan baik sebuah direktori dan semua orang tua dari direktori.

Berikut contoh menciptakan "/ tmp / user / java / bin" direktori:

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();
  }
}

Mengkompilasi dan mengeksekusi kode diatas untuk membuat "/ tmp / user / java / bin".

Catatan: Java secara otomatis menangani pemisah jalan di UNIX dan Windows sesuai konvensi. Jika Anda menggunakan garis miring (/) pada Windows versi Jawa, jalan masih akan menyelesaikan dengan benar.

Listing Direktori:
Anda dapat menggunakan list () metode yang disediakan oleh objek File untuk menampilkan daftar semua file dan direktori yang tersedia dalam sebuah 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 berikut hasil berdasarkan pada direktori dan file yang tersedia di direktori / tmp Anda:

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

No comments:

Post a Comment