Java-ファイルとI / O

java.ioパッケージには、Javaで入出力(I / O)を実行するために必要になる可能性のあるほぼすべてのクラスが含まれています。これらのストリームはすべて、入力ソースと出力宛先を表します。java.ioパッケージのストリームは、プリミティブ、オブジェクト、ローカライズされた文字などの多くのデータをサポートします。

ストリーム

ストリームは、データのシーケンスとして定義できます。ストリームには2種類あります-

  • InPutStream − InputStreamは、ソースからデータを読み取るために使用されます。

  • OutPutStream − OutputStreamは、宛先にデータを書き込むために使用されます。

Javaは、ファイルとネットワークに関連するI / Oを強力かつ柔軟にサポートしますが、このチュートリアルでは、ストリームとI / Oに関連する非常に基本的な機能について説明します。最も一般的に使用される例を1つずつ見ていきます-

バイトストリーム

Javaバイトストリームは、8ビットバイトの入出力を実行するために使用されます。バイトストリームに関連するクラスはたくさんありますが、最も頻繁に使用されるクラスは、FileInputStream そして FileOutputStream。以下は、これら2つのクラスを使用して入力ファイルを出力ファイルにコピーする例です。

Example

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

それではファイルを作成しましょう input.txt 次の内容で-

This is test for copy file.

次のステップとして、上記のプログラムをコンパイルして実行します。これにより、input.txtと同じ内容のoutput.txtファイルが作成されます。それでは、上記のコードをCopyFile.javaファイルに入れて、次のようにします。

$javac CopyFile.java
$java CopyFile

キャラクターストリーム

Java Byte ストリームは8ビットバイトの入出力を実行するために使用されますが、Javaは Characterストリームは、16ビットUnicodeの入力と出力を実行するために使用されます。文字ストリームに関連するクラスはたくさんありますが、最も頻繁に使用されるクラスは、FileReader そして FileWriter。内部的にはFileReaderはFileInputStreamを使用し、FileWriterはFileOutputStreamを使用しますが、ここでの主な違いは、FileReaderが一度に2バイトを読み取り、FileWriterが一度に2バイトを書き込むことです。

上記の例を書き直すことができます。これは、これら2つのクラスを使用して、入力ファイル(Unicode文字を含む)を出力ファイルにコピーします。

Example

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

それではファイルを作成しましょう input.txt 次の内容で-

This is test for copy file.

次のステップとして、上記のプログラムをコンパイルして実行します。これにより、input.txtと同じ内容のoutput.txtファイルが作成されます。それでは、上記のコードをCopyFile.javaファイルに入れて、次のようにします。

$javac CopyFile.java
$java CopyFile

標準ストリーム

すべてのプログラミング言語は、ユーザーのプログラムがキーボードから入力を受け取り、コンピューター画面に出力を生成できる標準I / Oのサポートを提供します。CまたはC ++プログラミング言語を知っている場合は、3つの標準デバイスSTDIN、STDOUT、およびSTDERRを知っている必要があります。同様に、Javaは次の3つの標準ストリームを提供します-

  • Standard Input −これは、データをユーザーのプログラムに供給するために使用され、通常、キーボードは標準入力ストリームとして使用され、次のように表されます。 System.in

  • Standard Output −これは、ユーザーのプログラムによって生成されたデータを出力するために使用され、通常、コンピューター画面が標準出力ストリームに使用され、次のように表されます。 System.out

  • Standard Error −これは、ユーザーのプログラムによって生成されたエラーデータを出力するために使用され、通常、コンピューター画面が標準エラーストリームに使用され、次のように表されます。 System.err

以下は、作成する簡単なプログラムです InputStreamReader ユーザーが「q」を入力するまで標準入力ストリームを読み取る-

Example

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

上記のコードをReadConsole.javaファイルに保存し、次のプログラムに示すようにコンパイルして実行してみましょう。このプログラムは、「q」を押すまで同じ文字を読み取り、出力し続けます。

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

ファイルの読み取りと書き込み

前に説明したように、ストリームはデータのシーケンスとして定義できます。ザ・InputStream ソースからデータを読み取るために使用され、 OutputStream 宛先にデータを書き込むために使用されます。

入力ストリームと出力ストリームを処理するクラスの階層は次のとおりです。

2つの重要なストリームは FileInputStream そして FileOutputStream、このチュートリアルで説明します。

FileInputStream

このストリームは、ファイルからデータを読み取るために使用されます。キーワードを使用してオブジェクトを作成できますnew 利用可能なコンストラクターにはいくつかの種類があります。

次のコンストラクターは、ファイル名を文字列として受け取り、ファイルを読み取るための入力ストリームオブジェクトを作成します-

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

次のコンストラクターは、ファイルオブジェクトを取得して、ファイルを読み取るための入力ストリームオブジェクトを作成します。まず、次のようにFile()メソッドを使用してファイルオブジェクトを作成します。

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

あなたが持っている一度のInputStream手にオブジェクトを、そのストリームに読み込んだり、ストリーム上で他の操作を行うために使用することができるヘルパーメソッドの一覧があります。

シニア番号 方法と説明
1

public void close() throws IOException{}

このメソッドは、ファイル出力ストリームを閉じます。ファイルに関連付けられているシステムリソースを解放します。IOExceptionをスローします。

2

protected void finalize()throws IOException {}

このメソッドは、ファイルへの接続をクリーンアップします。このストリームへの参照がなくなったときに、このファイル出力ストリームのcloseメソッドが呼び出されるようにします。IOExceptionをスローします。

3

public int read(int r)throws IOException{}

このメソッドは、指定されたバイトのデータをInputStreamから読み取ります。intを返します。データの次のバイトを返します。ファイルの終わりの場合は-1が返されます。

4

public int read(byte[] r) throws IOException{}

このメソッドは、入力ストリームから配列にr.lengthバイトを読み取ります。読み取られた合計バイト数を返します。ファイルの終わりの場合は、-1が返されます。

5

public int available() throws IOException{}

このファイル入力ストリームから読み取ることができるバイト数を示します。intを返します。

利用可能な他の重要な入力ストリームがあります。詳細については、次のリンクを参照してください-

  • ByteArrayInputStream

  • DataInputStream

FileOutputStream

FileOutputStreamは、ファイルを作成してデータを書き込むために使用されます。ストリームは、ファイルを出力用に開く前に、ファイルがまだ存在しない場合は作成します。

FileOutputStreamオブジェクトを作成するために使用できる2つのコンストラクターを次に示します。

次のコンストラクターは、ファイル名を文字列として受け取り、ファイルを書き込むための入力ストリームオブジェクトを作成します-

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

次のコンストラクターは、ファイルオブジェクトを取得して、ファイルを書き込むための出力ストリームオブジェクトを作成します。まず、次のようにFile()メソッドを使用してファイルオブジェクトを作成します。

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

あなたが持ってたらOutputStreamの手で物を、その後、ストリーミングしたり、ストリーム上で他の操作を行うために、書き込みに使用することができヘルパーメソッドのリストは、そこにあります。

シニア番号 方法と説明
1

public void close() throws IOException{}

このメソッドは、ファイル出力ストリームを閉じます。ファイルに関連付けられているシステムリソースを解放します。IOExceptionをスローします。

2

protected void finalize()throws IOException {}

このメソッドは、ファイルへの接続をクリーンアップします。このストリームへの参照がなくなったときに、このファイル出力ストリームのcloseメソッドが呼び出されるようにします。IOExceptionをスローします。

3

public void write(int w)throws IOException{}

このメソッドは、指定されたバイトを出力ストリームに書き込みます。

4

public void write(byte[] w)

上記のバイト配列からOutputStreamにw.lengthバイトを書き込みます。

利用可能な他の重要な出力ストリームがあります。詳細については、次のリンクを参照してください-

  • ByteArrayOutputStream

  • DataOutputStream

Example

以下は、InputStreamと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");
      }	
   }
}

上記のコードは、ファイルtest.txtを作成し、指定された数値をバイナリ形式で書き込みます。stdout画面の出力も同じです。

ファイルナビゲーションとI / O

ファイルナビゲーションとI / Oの基本を理解するために、他にもいくつかのクラスを受講します。

  • ファイルクラス

  • FileReaderクラス

  • FileWriterクラス

Javaのディレクトリ

ディレクトリは、他のファイルやディレクトリのリストを含めることができるファイルです。あなたが使うFileディレクトリを作成し、ディレクトリで使用可能なファイルを一覧表示するオブジェクト。詳細については、Fileオブジェクトで呼び出すことができるすべてのメソッドと、ディレクトリに関連するもののリストを確認してください。

ディレクトリの作成

2つの便利なものがあります File ディレクトリの作成に使用できるユーティリティメソッド-

  • ザ・ mkdir( )メソッドはディレクトリを作成し、成功した場合はtrueを返し、失敗した場合はfalseを返します。失敗は、Fileオブジェクトで指定されたパスがすでに存在するか、パス全体がまだ存在しないためにディレクトリを作成できないことを示します。

  • ザ・ mkdirs() メソッドは、ディレクトリとディレクトリのすべての親の両方を作成します。

次の例では、「/ tmp / user / java / bin」ディレクトリを作成します-

Example

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

上記のコードをコンパイルして実行し、「/ tmp / user / java / bin」を作成します。

Note− Javaは、慣例に従って、UNIXおよびWindowsのパス区切り文字を自動的に処理します。WindowsバージョンのJavaでスラッシュ(/)を使用する場合でも、パスは正しく解決されます。

ディレクトリの一覧表示

使用できます list( ) によって提供される方法 File 次のように、ディレクトリで使用可能なすべてのファイルとディレクトリを一覧表示するオブジェクト-

Example

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

これにより、で使用可能なディレクトリとファイルに基づいて、次の結果が生成されます。 /tmp ディレクトリ-

Output

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