Javaストリーム、ファイル、IO
Java.io パッケージには、入出力の操作に必要なほぼすべてのクラスが含まれています。これらすべてのストリーム クラスは、入力ソースと出力先を表します。
Java.io パッケージのストリームは、基本型、オブジェクト、ローカライズされた文字セットなど、多くの形式をサポートしています。
ストリームは、一連のデータとして理解できます。入力ストリームはソースからのデータの読み取りを表し、出力ストリームは宛先へのデータの書き込みを表します。
Java は I/O に対する強力かつ柔軟なサポートを提供し、ファイル転送やネットワーク プログラミングでより広く使用されています。
ただし、このセクションでは、ストリームと I/O に関連する最も基本的な関数について説明します。これらの関数を例を通して 1 つずつ学習していきます。
コンソール入力の読み取り
Java のコンソール入力は System.in によって行われます。
コンソールにバインドされた文字ストリームを取得するには、System.in を BufferedReader オブジェクトでラップして文字ストリームを作成します。
以下は、BufferedReader を作成するための基本的な構文です:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader オブジェクトが作成された後、read() メソッドを使用してコンソールから文字を読み取るか、readLine() メソッドを使用して文字列を読み取ることができます。 。
コンソールから複数文字入力を読み取ります
BufferedReader オブジェクトから文字を読み取るには、read() メソッドを使用します。その構文は次のとおりです:
int read( ) throws IOException
read() メソッドが呼び出されるたびに、1 つずつ読み取ります入力ストリーム文字から文字を取得し、その文字を整数値として返します。 ストリームが終了すると -1 を返します。このメソッドは IOException をスローします。
次のプログラムは、read() メソッドを使用して、ユーザーが「q」を入力するまでコンソールから文字を継続的に読み取る方法を示しています。
// 使用 BufferedReader 在控制台读取字符 import java.io.*; public class BRRead { public static void main(String args[]) throws IOException { char c; // 使用 System.in 创建 BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter characters, 'q' to quit."); // 读取字符 do { c = (char) br.read(); System.out.println(c); } while(c != 'q'); } }
上記の例のコンパイルと実行結果は次のとおりです:
Enter characters, 'q' to quit. 123abcq 1 2 3 a b c q
コンソールから文字列を読み取る
標準入力から文字列を読み取るには、BufferedReader の readLine() メソッドを使用する必要があります。
その一般的な形式は次のとおりです:
String readLine( ) throws IOException
以下のプログラムは、「end」という単語が入力されるまで文字の行を読み取って表示します。
// 使用 BufferedReader 在控制台读取字符 import java.io.*; public class BRReadLines { public static void main(String args[]) throws IOException { // 使用 System.in 创建 BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; System.out.println("Enter lines of text."); System.out.println("Enter 'end' to quit."); do { str = br.readLine(); System.out.println(str); } while(!str.equals("end")); } }
上記の例のコンパイル結果と実行結果は次のとおりです:
Enter lines of text. Enter 'end' to quit. This is line one This is line one This is line two This is line two end end
JDK 5 以降のバージョンでは、Java Scanner クラスを使用してコンソール入力を取得することもできます。
コンソール出力
前述したように、コンソール出力はprint()とprintln()によって完了します。これらのメソッドは PrintStream クラスによって定義され、System.out はこのクラスのオブジェクトへの参照です。
PrintStream は OutputStream クラスを継承し、メソッド write() を実装します。このように、write() を使用してコンソールに操作を書き込むこともできます。
PrintStream write() を定義する最も単純な形式は次のとおりです:
void write(int byteval)
このメソッドは、byteval の下位オクテットをストリームに書き込みます。
例
次の例では、write() を使用して文字「A」と次の改行文字を画面に出力します:
import java.io.*; // 演示 System.out.write(). public class WriteDemo { public static void main(String args[]) { int b; b = 'A'; System.out.write(b); System.out.write('\n'); } }
上記の例を実行して、出力ウィンドウに文字「A」を出力します
A
注: write print() メソッドと println() メソッドを使用する方が便利なので、() メソッドはあまり使用されません。
ファイルの読み取りと書き込み
前に述べたように、ストリームはデータのシーケンスとして定義されます。入力ストリームはソースからデータを読み取るために使用され、出力ストリームはターゲットにデータを書き込むために使用されます。
次の図は、入力ストリームと出力ストリームを説明するクラス階層図です。
以下で説明する 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 オブジェクトから指定されたバイトのデータを読み取ります。整数値として返されます。データの次のバイトを返すか、終わりに達した場合は -1 を返します。 |
4 | public int read(byte[] r) throws IOException{} このメソッドは、入力ストリームから r.length バイトを読み取ります。読み取られたバイト数を返します。ファイルの終わりの場合は、-1 が返されます。 |
5 | public int available() throws IOException{} この入力ストリームの次のメソッド呼び出しによってブロックされずに、この入力ストリームから読み取れるバイト数を返します。整数値を返します。 |
InputStream に加えて、他の入力ストリームもあります。詳細については、以下のリンクを参照してください:
ByteArrayInputStream
DataInputStream
このクラスはファイルの作成に使用されます。ファイルに送信します データを書き込みます。
ストリームが出力用にファイルを開く前にターゲット ファイルが存在しない場合、ストリームはファイルを作成します。
FileOutputStream オブジェクトの作成に使用できるコンストラクターが 2 つあります。
文字列タイプのファイル名を使用して出力ストリーム オブジェクトを作成します:
OutputStream f = new FileOutputStream("C:/java/hello")
ファイル オブジェクトを使用して、ファイルを書き込むための出力ストリームを作成することもできます。まず File() メソッドを使用してファイル オブジェクトを作成する必要があります:
File f = new File("C:/java/hello"); OutputStream f = new FileOutputStream(f);
OutputStream オブジェクトを作成した後、次のメソッドを使用してストリームに書き込んだり、他のストリーム操作を実行したりできます。
メソッドと説明 | |
---|---|
public void close() throws IOException{} | このファイル入力ストリームを閉じ、このストリームに関連するすべてのシステム リソースを解放します。 IOExceptionをスローします。 |
protected void Finalize()throws IOException {} | このメソッドはファイルへの接続をクリアします。ファイル入力ストリームが参照されなくなったら、必ずファイル入力ストリームの close メソッドを呼び出してください。 IOExceptionをスローします。 |
public void write(int w)throws IOException{} | このメソッドは、指定されたバイトを出力ストリームに書き込みます。 |
public void write(byte[] w) | 指定された配列内の w.length 長さのバイトを OutputStream に書き込みます。 |