java文字入力ストリーム、文字出力ストリーム、文字バッファストリーム

7885 ワード

1文字入力ストリームの文字ストリーム(Java IOのReaderとWriter)機能はInputStreamとOutputStreamと非常に似ています。InputStreamとOutputStreamはバイト処理に基づいていますが、文字ストリームは文字処理に基づいています。主にテキストの読み書きに使われます。1.1 Readerクラスの一般的な方法Readerクラスは、Java IOのすべてのReaderのベースクラスである。サブクラスは、FileReader、BufferedReader、InputStreamReader、StringReader、その他のReaderを含む。1.read()文字入力ストリームを読みだします。文字入力ストリームの次の文字を読み出して、1文字を返します。この戻り値の範囲は0から65535までです。これは、Readerがデータソースから1回に2バイトしか読み取らないという意味ではなく、Readerはテキストの符号化に従って、1回に1バイト以上のバイトを読み出す。2.read(char cbuf[]);文字入力ストリームを読みだします。複数の文字を読み、文字配列cbufを預け、実際に読み込んだ文字数を返します。3.read(char cbuf[],int off,int len);メソッドで、文字入力ストリームを読みだします。len個の文字を読むたびに、文字配列cbufに預け入れて、offから下付きで保存します。4.close()現在のストリームを閉じて、当該ストリームに関連するリソースを解放し、資源の流出を防止する。リソースがあるtry文では自動的に呼び出しられます。ストリームを閉じてからも文字の読み取りを試みます。IOException異常が発生します。1.2 Readerクラスのサブクラス:FileReaderクラスはInputStream Readerクラスから継承されます(間接的にReaderを継承しました)。このクラスは、ストリーム中のデータを文字で読みます。1.3 FileReader構造方法と常用方法1.3.1構造方法1.FileReader(File file)実際のファイルへの接続を開くことにより、ファイルシステム内のFileオブジェクトfileで指定されたFileReaderを作成します。2.FileReader(String fileName)実際のファイルへの接続を開くことによって、ファイルシステムのパス名nameで指定されたFileReaderを作成します。3.FileReader(FileDescriptor fd)データを読み出すFileDescripterが与えられた場合、新しいFileReaderを作成します。   ヒント:FileDescriptorは「ファイル記述子」です。   三つの属性があります。       1.in標準入力(キーボード)の記述子(キーボードからリードストリームを入力)   2.out標準出力(画面)の記述子(ディストリビュータに出力)   3.err標準エラー出力(画面)の記述子(流れを赤色のフォントでコンソールに出力する)   コードの例:   
    try {
       	FileWriter fw = new FileWriter(FileDescriptor.out);
       	fw.write("11111。");
       	fw.flush();
       	fw.close();
       }...
1.3.2一般的な方法
1.read()文字入力ストリームを読みだします。文字入力ストリームの次の文字を読み出して、1文字を返します。
    
  try {
       	File file = new File("test.txt");
       	FileReader fileReader = new FileReader(file);
       	int read = fileReader.read();//            
       	System.out.println((char)read);
       }...
2.read(char cbuf[]);文字入力ストリームを読みだします。複数の文字を読み、文字配列cbufを預け、実際に読み込んだ文字数を返します。
     
  try {
       	File file = new File("test.txt");
       	FileReader fileReader = new FileReader(file);
       
       	char c [] = new char[20];
       	int len = fileReader.read(c);//
       	System.out.println("        :"+len);
       	
       	for (char d : c) {
       		System.out.print(d);
       	}
       }...
3.read(char cbuf[],int off,int len);文字入力ストリームを読みだします。len個の文字を読むたびに、文字配列cbufに預け入れて、offから下付きで保存します。
     
  try {
       	File file = new File("test.txt");
       	FileReader fileReader = new FileReader(file);
       	
       	char c [] = new char[20];
       	int len = fileReader.read(c,2,8);//  8     c  ,   2    
       	System.out.println("        :"+len);
       	
       	for (char d : c) {
       		System.out.print(d);
       	}
       	
       }
4.close()現在のストリームを閉じて、当該ストリームに関連するリソースを解放し、資源の流出を防止する。リソースがあるtry文では自動的に呼び出しられます。ストリームを閉じてからも文字の読み取りを試みます。IOException異常が発生します。
     
  try {
       	File file = new File("test.txt");
       	FileReader fileReader = new FileReader(file);
       	int read = fileReader.read();//
       	System.out.println((char)read);
       	fileReader.close();//  close()    ,       。
       }...
       //       
         ...finally {
           	if(fileReader!=null)
       			fileReader.close();
         }
   注意:
   1.通常はcloseを使わないとメモリが漏れてしまいます。ゴミ回収メカニズムは回収されますが、自分で明示的にシャットダウンしたほうがいいです。
   2.OutputStreamの役割は、例えばFileOutStreamであり、closeを呼び出しないとキャッシュをファイルに読み込まない。
   したがって、IOストリームを使用した後は、システムリソースを解放するためにクローズド()によってオフします。
2文字出力ストリーム
2.1 Writer類の常用方法
1.write(String str)指定した文字列をこの出力ストリームに書き込みます。
2.write(char[]cbuf,int off,int len);指定されたchar配列のうち、オフセット量offから始まるlen個の文字をこの出力ストリームに書き込みます。
3.flush(); キャッシュのデータを空にして、下の階に実際の書き込みを行うように通知します。(強制的にキャッシュエリアのデータをファイルに書き込む)
4.close()現在のストリームを閉じて、ストリームに関連するリソースを解放します。
2.2 Writer類のサブクラス:FileWriter
FileWriter類はOutput Stream Writer類から継承されています(間接的にWriter類を継承します)。このクラスは文字ごとにストリームにデータを書き込みます。
2.3 FileWriter構造方法と常用方法
2.3.1構造方法
1.FileWriter(File file);実際のファイルへの接続を開くことによって、ファイルシステムのFileオブジェクトfileによって指定されるFileWriterが作成される。 
2.FileWriter(File file,bolean apend);実際のファイルへの接続を開くことによって、ファイルシステムのFileオブジェクトfileによって指定されるFileWriterが作成される。2番目のパラメータがtrueである場合は、ファイルの先頭ではなく、ファイルの最後に文字を書き込みます。
3.FileWriter(String fileName);実際のファイルへの接続を開くことにより、ファイルシステムのパス名nameで指定されたFileWriterを作成します。
4.FileWriter(String fileName,bootlean apend);実際のファイルへの接続を開くことにより、ファイルシステムのパス名nameで指定されたFileWriterを作成します。2番目のパラメータがtrueである場合は、ファイルの先頭ではなく、ファイルの最後に文字を書き込みます。
5.FileWriter(FileDescriptor fd)データを書き込むFileDescripterが与えられた場合、新しいFileReaderを作成します。(テキストストリームはコンソールに出力することができます)。
2.3.2常用方法
1.write(String str)指定した文字列をこの出力ストリームに書き込みます。
     
  try {
       	File file = new File("test.txt");
       	Writer fileWriter = new FileWriter(file);
       	fileWriter.write("    ,     。");
       	fileWriter.flush();
       	fileWriter.close();
       }...
  
2.write(int c)指定された文字をこの出力ストリームに書き込みます。
     
  try {
       	File file = new File("test.txt");
       	Writer fileWriter = new FileWriter(file);
       	fileWriter.write(' ');
       	fileWriter.flush();
       	fileWriter.close();
       }...
3.write(char[]cbuf);この出力ストリームにcbuf文字配列を書き込みます。
      
 try {
       	File file = new File("test.txt");
       	Writer fileWriter = new FileWriter(file);
       	char[] charArray = "        ".toCharArray();
       	fileWriter.write(charArray);
       	fileWriter.flush();
       	fileWriter.close();
       }
4.write(char[]cbuf,int off,int len)cbuf文字配列をオフセット量offで開始したlen文字でこの出力ストリームに書き込みます。
    
   try {
       	File file = new File("test.txt");
       	Writer fileWriter = new FileWriter(file);
       	char[] charArray = "        ".toCharArray();
       	fileWriter.write(charArray, 1, 5);//     1   ,  5   。
       	fileWriter.flush();
       	fileWriter.close();
       }
5.write(String str,int off,int len)
   
    try {
       	File file = new File("test.txt");
       	Writer fileWriter = new FileWriter(file);
       	String str ="            ";
       	fileWriter.write(str, 3, 5);
       	fileWriter.flush();
       	fileWriter.close();
       } 
3文字キャッシュフロー(BufferedReader/BufferedWriter)
(BufferedReader/BufferedWriter)はバッファー付きの文字ストリームで、デフォルトのバッファサイズは8 Kbで、アクセスディスクの回数を減らしてファイルの読み込み性能を向上させることができます。また、1行の文字を一度に読み取ることができます。(配管カバーのように、緩衝を持たない流れは一滴ずつしか流れません。パイプを通した後、一滴ずつ外の配管に残してから一回で流出させます。)
3.1文字キャッシュフローの構造方法
3.1.1 BufferedReader
1.BufferedReader(Reader in)デフォルトのバッファサイズ8 Kbの文字バッファ入力ストリームを作成します。
2.BufferedReader(Reader in,int sz)文字バッファ入力ストリームを作成します。sz/byteサイズのバッファを割り当てます。
3.1.1 BufferedWriter
1.BufferedWriter(Writer out);デフォルトのバッファサイズ8 Kbの文字バッファ出力ストリームを作成します。
2.BufferedWriter(Writer out、int sz);文字バッファ出力ストリームを作成します。sz/byteサイズのバッファを割り当てます。
3.2文字キャッシュフローの使用方法:readLine()、newLine()
1.BufferedReader.readline()文字バッファ入力ストリームで文字を読み取る場合は、一度に1行を読み取り、次の行にラベルを向けることができます。
      
 try {
       	File file = new File("test.txt");
       	FileReader fr = new FileReader(file);
       	BufferedReader br = new BufferedReader(fr);
       	String str;
       	while ((str = br.readLine())!=null) {
       		System.out.println(str);
       	}
       }
2.BufferedWriter.newLine()文字列バッファ出力ストリームに文字を書き込む場合、デフォルトは行に書き込み、改行が必要な場合はnewLine()を呼び出してテキストの改行を行います。
     
  try {
       	File file = new File("test.txt");
       	FileWriter fw = new FileWriter(file);
       	BufferedWriter bw = new BufferedWriter(fw);
       	bw.write("       ");
       	bw.newLine();//  
       	bw.write("        ");
       	bw.flush();//     ,       
       	bw.close();
       }...