Java言語の入力および出力関数は非常に強力で柔軟です。唯一の欠点は、多くの異なるオブジェクトをラップする必要があるため、入力コードと出力コードが非常に簡潔であるように見えることです。 Javaクラスライブラリでは、標準入力と出力、ファイル操作、ネットワーク上のデータストリーム、ストリングストリーム、オブジェクトストリーム、zipファイルストリームなど、幅広いフィールドが含まれるため、IO部品のコンテンツは非常に大きくなっています。
流れの階層
意味:
Javaはデータオブジェクトを入力ストリームに読み取り、書き込みできるオブジェクトは出力ストリームと呼ばれます。構造図は次のとおりです。
1。入力と出力:
入力/出力とは、特定のデバイスまたは環境へのデータの入力または出力を指します。すべての言語には、入力と出力の関数があります。 Javaプログラムでは、入力と出力はストリームを介して完了します。 Java入力および出力システムを介して物理デバイスに接続されています。入力ストリームと出力ストリームに接続されている実際の物理デバイスは異なりますが、同じ方法で動作する可能性があります。たとえば、ハードディスクの入力と出力、ネットワークホストの入力と出力の場合、さまざまなデバイスまたは環境にさまざまな入出力の問題とソリューションがあります。
2。ストリーム:
ストリームとは、コンピューターの入力と出力の間を移動する一連のデータを指します。ストリームシーケンス内のデータは、処理されていない生のバイナリデータまたは特定のエンコードプロセスの後に特定の形式の要件を満たす特定のデータのいずれかです。コード内部に関連するパーツと、コードの外部コードとは無関係の部分を呼び出すのが慣習です。
データ送信方法から、ストリームは入力ストリームと出力ストリームに分けることができます。ストリームの内容から、ストリームはバイトストリームと文字ストリームに分割できます。
(1)入力および出力ストリーム
入力ストリームの機能は、プログラムの内側から外側までデータを読み取ることです。
出力ストリームの機能は、プログラムの外部から内部にデータを書き込むことです。
(2)バイトストリームと文字ストリーム
バイトストリームは、バイト単位でデータを読み取り、書き込み、次々にバイトからデータを読み取り、書き込むことができます。また、一度に任意の長さのバイトブロック(つまり、バイト配列)を読み書きできます。
キャラクターストリームは、ストリームでデータを読み取り、執筆するときに、一度に1つのキャラクター、または1つの文字ブロックで使用されます。
ストリーム処理を容易にするために、Java言語のストリームがjava.ioパッケージにカプセル化されるため、ストリームを使用するには、java.ioパッケージをインポートする必要があります。
JavaのI/Oストリームは、4つの抽象クラス、すなわちinputstream、outputstream、リーダー、ライターに基づいています。 InputStreamクラスとそのサブクラスを使用して、バイトストリームデータの入力処理を実装できます。 OutputStreamクラスとそのサブクラスを使用して、バイトストリームデータの出力処理を実装できます。リーダークラスとそのサブクラスを使用して、文字ストリームデータの入力処理を実装できます。ライタークラスとそのサブクラスを使用して、文字ストリームデータの出力処理を実装できます。
1。ファイルクラス
Javaのファイルの読み取りと書き込みは、入力ストリームと出力ストリームを介して実装できますが、Javaはファイルディレクトリ、プロパティ、および管理情報に実装するための特別なファイルクラスを提供します。
(1)ファイルクラスのコンストラクター
ファイルクラスオブジェクトを作成するためのコンストラクターは次のとおりです。
file(string pathname); //パス名に基づいて作成します。
file(file parent、string child); //指定されたファイルオブジェクトの下に作成します。
file(string parent、string child); //指定されたパスに基づいて作成します。
file(url url); // URLリンクに基づいて作成します。
(2)ファイルクラスの一般的な方法
boolean canread():ファイルオブジェクトに対応するパスが読み取り可能かどうかを判断します。
boolean canwrite():ファイルオブジェクトに対応するパスが書き込み可能かどうかを判断します。
Booleanが存在する():ファイルオブジェクトに対応するパスが存在するかどうかを判断します。
string getabsolutepath():ファイルオブジェクトの対応するパスの絶対パスを取得します。
string getParent():ファイルオブジェクトの対応するパスのディレクトリを取得します。
文字列getPath():ファイルオブジェクトに対応するパスを取得します。
boolean isabsolute():ファイルオブジェクトに対応するパスが絶対パスであるかどうかを判断します。
string getName():ファイルオブジェクトの対応するパスのファイル名を取得します。
boolean isdirectory():ファイルオブジェクトに対応するパスがディレクトリであるかどうかを判断します。
boolean isfile():ファイルオブジェクトに対応するパスがファイルであるかどうかを判断します。
Boolean Ishidden():ファイルオブジェクトに対応するファイルが非表示属性であるかどうかを判断します。
長さ():ファイルオブジェクトに対応するファイルの長さを取得します。
Long LastModified():ファイルオブジェクトに対応するファイルの最新の変更時間を取得します。
Boolean Renameto(ファイルDest):ファイルオブジェクトに対応するファイルのファイル名を変更します。
boolean setreadonly():ファイルオブジェクトの対応するファイルを読み取り専用に設定します。
(3)ファイルを作成します
ファイル出力ストリームを作成して、新しいファイルを作成します。このメソッドはディレクトリを作成できません。また、作成するファイルが既に存在する場合、元のファイルを上書きするために新しいファイルが作成されます。
fileoutputStream file = new fileoutputStream( "filename");
(4)ファイルリストを取得します
ファイルクラスのリスト()またはlistFiles()メソッドを介して特定のフォルダーのファイルリストを取得します。いくつかの形式があります:
string [] list();
file [] listfiles();
file [] listfiles(filenamefilterフィルター);
file [] listfiles(filefilterフィルター);
その中で、FileFilterとFilenameFilterは両方ともインターフェイスであり、フィルターは対応するフィルターです。特定のクラスを宣言し、フィルターインターフェイスを実装して、すべてのマッチングファイルをフィルタリング条件でリストできるようにします。
2。inuptStreamクラスと出力ストリームクラス
バイトストリームクラスは、inputstreamとoutputstreamの抽象クラスから派生した一連のクラスです。このタイプのストリームは、バイトに基づいています。 inputStreamおよびoutputStreamクラスを使用して、バイナリファイルデータを処理するだけでなく、テキストファイルを処理できます。
1。入力ストリームクラスの一般的な方法
inputstreamクラスは、すべての入力ストリームの親クラスです。このクラスのすべてのメソッドは、エラーが発生したときにIOExceptionをスローします。主な方法は次のとおりです。
(1)public abstract int read()これらのioException
このメソッドは、0〜255または-1と-1の間の整数を返します。これは、ストリームの終了が遭遇し、他の対応するバイトが読み取られたことを意味します。
(2)public int read(byte [] b)これらのioxception
このメソッドは、パラメーターで与えられたバイト配列にバイトを読み取り、戻り値は実際に読み取られるバイト数または-1(ストリームの終わりが発生します)です。
(3)public int read(byte [] b、int i、int b)それらのioexception
メソッドの最後の2つのパラメーターは、読み取りの開始位置とそれぞれ最大バイト数を読み取ります。
(4)public int vayaver()
現在のストリームオブジェクトで読み取られていないバイト数を返します。つまり、ストリーム内のデータの長さを取得します。
(5)パブリックロングスキップ(長いn)
現在のストリームオブジェクトのnバイトをスキップし、スキップしたバイトの実際の数は戻り値として返されます。
(6)public boolean marksupported()
フローがマークをサポートし、マークが元の読み取り位置に簡単に戻ることができるかどうかを判断します。
(7)public void close()
現在のストリームオブジェクトを閉じて、ストリームオブジェクトが占有しているリソースをリリースします。
(8)パブリックボイドマーク(int i)
後でその位置から読み続けることができるように、ストリーム内の現在の位置にフラグを設定します。
(9)public void reset()
ストリームリーディングの位置をセットマークの位置に戻します。
2。outputStreamクラスの一般的な方法
outputStreamクラスは、すべての出力ストリームの親クラスです。このクラスのすべてのメソッドは、エラーケースでioExceptionを排出し、IOExceptionをスローします。主な方法は次のとおりです。
(1)public void write(int b)スローIoException
ストリームの最後にデータのバイトを書きます。
(2)public void write(byte [] b)はioExceptionをスローします
配列Bのデータを現在のストリームオブジェクトに書き込みます。
(3)public voidワイヤ(byte [] b、int i、int n)
Array内の後続の長さのデータを、最初から順番にストリームオブジェクトに書き込みます(含まれています)。
(4)public void close()
現在のストリームオブジェクトを閉じて、ストリームオブジェクトが占有しているリソースをリリースします。
(5)public void flush()
現在のストリームオブジェクトのバッファーデータを強制出力します。この方法を使用して、即時の出力を実現します。
上記の2つのクラスのほとんどの方法は、Mark()およびReset()メソッドを除き、inputStreamとoutputStreamのサブクラスによってオーバーライドされます。
3。FileInputStreamクラス
FileInputStreamクラスは、入力Streamのサブクラスであり、ファイルをデータ入力ソースとして使用してファイル読み取り操作を実装するデータストリームを処理するために使用できます。
その建設方法は次のとおりです。
(1)fileInputStream(ファイルf)
データソースとして指定された名前を持つファイルオブジェクトFを持つファイル入力ストリームを作成します。
fが存在する場合、それはファイルパスである必要があります。それがディレクトリの場合、iOExceptionがスローされますが、このディレクトリが存在しない場合、スローされます:filenotfoundexceptionはスローされます。
(2)fileInputStream(文字列名)
データソースとして名前が付いたファイルを含むファイル入力ストリームを作成します。
(3)fileInputStream(filedeScriptor F)
ファイル記述子オブジェクトfに基づいて、入力エンドのファイル入力ストリームを作成します。
その主な方法は、親クラス(inputstreamクラス)の方法をオーバーライドすることです:read()、read(byte [] b)、read(byte [] b、int i、int length)、skip(long n)、avainal()、close()。
4。fileoutputStreamクラス
FileOutputStreamクラスは、ファイルによるデータストリーム出力をデータとして処理し、ファイルに書き込み操作を実装するために使用されるOutputStreamのサブクラスです。その建設方法は次のとおりです。
fileoutputStream(ファイルf);
fileoutputStream(ファイルF、ブールB);
fileoutputStream(String F);
その主な方法には、親クラスをカバーする方法:書き込み(int b)、書き込み(byte [] b)、書き込み(byte [] b、int off、int len)、close()、およびflush()が含まれます。
5。DatainputStreamおよびDataOutputStreamクラス
DateInputStreamおよびDataOutputStreamクラスによって作成されたオブジェクトは、それぞれデータ入力ストリームとデータ出力ストリームと呼ばれます。それらは、それぞれDateAnputインターフェイスとDataUtputインターフェイスを実装します。 DateInputStreamクラスとDataOutputStreamオブジェクトにより、さまざまなタイプのJavaデータを読み取ることができます。
これらの2つのストリームは、フィルタリングストリームに属し、入力ストリームや出力ストリームなどの他のストリームが入力または出力としてよく使用されます。例えば:
fileInputStream fis = new fileInputStream( "d://a.txt");
datainputStream dis = new DatainputStream(fis);
fileoutputStream fos = new fileoutputStream( "d://a.txt");
dataoutputStream dos = new DataOutputStream(FOS);
dateinputStreamとdataoutputStreamの入力と出力はほぼ対応しています。各基本的なデータ型の読み取りおよび書き込み方法は、その接尾辞名から識別できます。例えば:
readint()、writeint()// int値を読み取り、書き込みます
readboolean()、writeboolean()//ブール値を読み取り、書き込みます
readchar()、writechar()//文字を読み取り、書き込みます
readdouble()、writedouble()//二重精度の浮動ポイント値を読み取り、書き込みます
readfloat()、writefloat()//シングルプレシジョンの浮動小数点値を読み取り、書き込みます
writechars()//文字列を書きますが、文字列を直接読む方法はありません
3。リーダークラスとライタークラス
Javaの文字はUnicodeエンコードを使用し、各文字には2つのバイト、つまり16ビットがあります。文字ストリームは、16ビットのユニコードコードで表される文字に基づいており、テキストデータを読み取り、書き込みます。これにより、Javaプログラムの内部形式とテキストファイル、表示、キーボード入力などの外部形式間の変換が実現できます。この方法は、漢字の操作に特に適しています。漢字がバイトで動作する場合、Carled Codeを出力することが可能です。
リーダーとライターは、java.ioパッケージのすべての文字ストリームの抽象的な親クラスであり、他のストリームクラスを実装するための重要な方法を定義します。最も重要な2つのものは、それぞれ文字データを読み取りおよび書き込むread()とwrite()です。リーダーとライターのクラスとそのサブクラスの方法は、InputStreamクラス、OutputStreamクラス、およびサブクラスを使用する方法と非常に似ています。ただし、その中のパラメーターは、文字または文字配列に置き換えられます。
1。リーダークラスとライタークラスの一般的な方法
リーダークラスは抽象クラスです。このクラスのすべてのメソッドは、エラー条件下でIOException例外をスローします。一般的な方法は次のとおりです。
(1)要約void close():入力ソースを閉じます。
(2)void mark(int numchars):入力ソースの現在のポイントにマークを配置します。
(3)Boolean Marksupported():このストリームがMark/Resetメソッドをサポートしている場合、Trueが返されます。
(4)int read():単一の文字を読み取ります。
(5)int read(char [] buf):文字を文字配列に読み取ります。
(6)要約int read(char [] buf、int offset、int numchars):アレイの一部に文字を読み取ります。
(7)boolean ready():次の入力要求が待つ必要がない場合はtrueを返し、それ以外の場合はfalseを返します。
(8)void reset():入力ポインターを前にマークされたセットにリセットします。
(9)Long Skip(Long Numchars):Nachare入力をスキップして、スキップした文字の実際の数を返します。
ライタークラスも抽象クラスであり、一般的に使用される方法は次のとおりです。
(1)Abstract void close():出力ストリームを閉じます。
(2)Abstract void flush():出力ステータスを決定して、キャッシュをクリアします。
(3)void write(int ch):単一の文字を書きます。
(4)void write(char [] buf):文字配列に書き込みます。
(5)Abstract void write(char [] buf、int offset、int numchars):文字配列の一部を書き込みます。
(6)void write(string str):文字列を書きます。
(7)void write(string str、int offset、int numchars):文字列の一部を書き込みます。
2。FILEREADERクラス
FileReaderクラスは、inputStreamReaderクラスから継承し、inputStreamReaderクラスはリーダークラスから継承します。したがって、ReaderクラスとInputStreamReaderクラスによって提供される方法は、FileReaderクラスによって作成されたオブジェクトに使用できます。 FileReaderのコンストラクターの方法は次のとおりです。
fileReader(ファイルファイル);
FileReader(filedeScriptor e);
FileReader(String Filename);
3。ファイルライタークラス
FileWriterクラスは、OutputStreamWriterクラスから継承し、OutputStreamWriterクラスはライタークラスから継承します。したがって、WriterクラスとOutputStreamWriterクラスによって提供される方法は、FileWriterクラスによって作成されたオブジェクトで使用できます。 FileWriterのコンストラクターメソッドは次のとおりです。
filewrite(file filepath);
filewrite(ファイルF、ブールアデアン);
filewrite(filedescriptor e);
filewrite(string filename);
filewrite(string filename、boolean append);
4。BufferedReaderクラス
BufferedReaderクラスは、バッファ内のデータを読み取るために使用されるReaderクラスから継承されます。 BufferedReaderクラスは、フィルタリングストリームに属し、FileReaderなどの他のストリームが入力または出力として使用されることがよくあります。その建設方法は次のとおりです。
BufferedReader(Reader in);
BufferedReader(Reader in、int bufsize);
例えば:
FileReader fr = new fileReader( "d:/1.txt");
BufferedReader buf = new BufferedReader(FR);
BufferedReaderは、すべてのテキスト行を読み取るためにReaderLine()メソッドを提供します。
5。BufferedWriterクラス
BufferedWriterクラスはWriterクラスから継承され、BufferedWriterクラスはデータをバッファーに書き込むために使用されます。 BufferedWriterクラスの使用は、BufferedReaderクラスの使用に似ています。違いは、バッファ内のデータを最終的にFlush()メソッドでクリアする必要があることです。つまり、バッファ内のすべてのデータをファイルに記述します。その建設方法は次のとおりです。
BufferedWriter(Writer Out);
BufferedWriter(Writer Out、Int Bufsize);
4。RANDOMACCESSFILEクラス
Javaのランダムファイルアクセスには、Objectクラスから直接継承し、インターフェイスのDatainputとDataOutputを実装する、ランダムアクセスファイルクラスを使用する必要があります(このクラスは、読み取りだけでなく、読み書きだけでなく、書き込みも許可します)。
RandomAccessFileクラスは、DateAnputおよびDataUtputインターフェイスで定義されているすべてのメソッドを実装するため、ファイルから基本タイプデータを読み取り、基本タイプデータをファイルに書き込むことができます。 DatainputおよびDataUtputインターフェイスで定義されているメソッドに加えて、RandomAccessFileクラスは、ランダムアクセスをサポートする他のメソッドも定義します。
RandomAccessFileクラスによって作成されたストリームは、以前の入力および出力ストリームとは異なります。 RandomAccessFileクラスは、入力ストリームクラスの入力ストリームクラスのサブクラスでも、出力ストリームクラスの出力ストリームクラスのサブクラスでもありません。ただし、RandomAccessFileクラスによって作成されたストリームの方向は、ソースと宛先の両方として使用できます。言い換えれば、ファイルを読み書きするときは、ファイルを指すRandomAccessFileストリームを作成して、ストリームからファイルのデータを読み取り、ストリームを介してファイルにデータを書き込むことができます。
ランダムアクセスファイルクラスの2つのコンストラクターメソッド:
(1)randomAccessFile(文字列名、文字列モード)
パラメーター名はファイル名を決定するために使用され、作成されたストリームのソース(フロー宛先)を与え、パラメーターモードにはR(読み取り専用)またはRW(読み取り可能)が必要になり、ファイルへの作成されたストリームのアクセス権が決定されます。
(2)randomAccessFile(ファイルファイル、文字列モード)
パラメーターファイルはファイルオブジェクトであり、ソース(ストリームの宛先も)を提供します。パラメーターモードには、R(読み取り専用)またはRW(読み取り能動)が必要であり、ファイルへの作成されたストリームのアクセス権を決定します。オブジェクトを作成する場合、filenotFoundExceptionをキャッチする必要があります。ストリームが読み取りおよび書き込み操作を実行する場合、ioExceptionをキャッチする必要があります。
オブジェクトの情報を読み書きする方法は、randomAccessfileの情報を入力してデータオブジェクトを出力する方法と同じです。クラスDatainputStreamおよびDataOutputStreamのすべてのread()およびwrite()メソッドにアクセスできます。
ファイルの読み取りと書き込みのポインターを移動する方法:
(1)long getFilePointer():ファイルポインターの現在の場所を返します。
(2)void seek(long pos):指定された絶対位置にファイルポインターを配置します。位置値は、ファイルの開始からバイトオフセットPOSとして計算されます。 POSは0です。これはファイルの開始を表します。
(3)長さ():ファイルの長さを返します。位置値は長さ()であり、これはファイルの終わりを表します。