Java IOストリームの文字ストリーム、バッファ付き文字ストリーム
10283 ワード
IO流
字が少なくて、内容は本当に少なくて、ここから諸君に1篇の大神のブログを推薦して、総括の構想ははっきりしていて、鬼斧神工、ははは、とにかく総括するのはとても良いです.住所を参照:
***
***
IO分類は、データ型によって文字ストリーム、バイトストリームに分けられる. は、データの流れによって入力ストリームに分けられ、出力ストリームである.
入力バイトストリーム(InputStrem)出力バイトストリーム(OutputStrem)文字入力ストリーム(Reader)文字出力ストリーム(Writer)
まず、文字出力ストリームWriterを見てみましょう.
文字出力ストリーム-----Writer
それを理解するには、抽象的で、辺鄙で、交流しにくいので、私たちはその子孫から始めます.まず孫のFileWrilerを見てみましょう.
FileWriterはOutputStreamWriterから継承
構築方法:
構造方法が異常であることがわかります.上のコードはすでにFileWriterのすべてのコードです.
主な方法: void write(String str)書き込み文字列.このメソッドを実行した後も、文字データは目的のファイルに書き込まれていません.文字データはバッファに保存されます.このとき、リフレッシュメソッドを使用すると、目的のファイルにデータを保存できます. void flush()は、ストリーム内のバッファをリフレッシュします.バッファ内の文字データを目的ファイルに保存します. void close()このストリームを閉じます.閉じる前に、このストリームのバッファがリフレッシュされます.クローズ後、書き込みまたはリフレッシュすると、IOException異常が放出されます.
ケース Configのコード 結果
デフォルトの書き込みモードが上書きであることを示します.
文字入力ストリーム-----Reader
同じように彼の孫類を見る.
FileReaderはInputStreamReaderから継承されます
構築方法は、すべてのソースコードでもあります.
主な方法: void read()は、単一の文字を読み出します.整数として読み込まれた文字を返し、ストリームの最後に達した場合は-1を返します. void read(char[]char)文字を配列に読み込みます.読み出された文字数を返します.末尾に達した場合は、-1を返します. void close()このストリームオブジェクトを閉じます.関連付けられたすべてのリソースを解放する ケース---前のケースのtestFileWriter 2.txtファイルの内容を読みます
結果
ケース----void read(char[]char)の使い方を示す
結果
読み取った内容は同じであることがわかります.
文字ストリーム(FileReader FileWriter)レプリケーション・ファイル・ケース
結果
赤をつけるのは私のせいではありません.もともと赤をつけるべきでした.
文字出力ストリームにはバッファ---FileWriterとBufferedWriterが使用されます FileWriterファイル文字出力ストリーム BufferedWriterバッファ文字出力ストリーム BufferedWriterバッファ文字出力ストリーム、直接Writerから継承
構築方法
見間違えなければ2つですが、BufferedWriterインスタンスを得るには、Writerインスタンスを渡さなければなりません.
運用例
結果
注意:バッファ・データは、メモリにデータを格納し、ファイルに書き込まれません.ストリームを閉じる前にflush()メソッドを実行する必要があります.皆さんはFileWriterがBufferedWriterに包装されていることに気づいたことがありますか.の次は、デコレーションモードについて少しご紹介します.
字が少なくて、内容は本当に少なくて、ここから諸君に1篇の大神のブログを推薦して、総括の構想ははっきりしていて、鬼斧神工、ははは、とにかく総括するのはとても良いです.住所を参照:
***
***
IO分類
入力バイトストリーム(InputStrem)出力バイトストリーム(OutputStrem)文字入力ストリーム(Reader)文字出力ストリーム(Writer)
まず、文字出力ストリームWriterを見てみましょう.
文字出力ストリーム-----Writer
それを理解するには、抽象的で、辺鄙で、交流しにくいので、私たちはその子孫から始めます.まず孫のFileWrilerを見てみましょう.
FileWriterはOutputStreamWriterから継承
構築方法:
// 。 , 。
public FileWriter(String var1) throws IOException {
super(new FileOutputStream(var1));
}// :FileWriter fw=new FileWriler("D:files.txt");
// , 。
public FileWriter(String var1, boolean var2) throws IOException {
super(new FileOutputStream(var1, var2));
}// :FileWriter fw=new FileWriler("D:files.txt",true);//true ,false , , ( )
//
public FileWriter(File var1) throws IOException {
super(new FileOutputStream(var1));
}// :FileWriter fw=new FileWriter(new File("D:files.txt"));
//
public FileWriter(File var1, boolean var2) throws IOException {
super(new FileOutputStream(var1, var2));
}// :FileWriter fw=new FileWriter(new File("D:files.txt"),flase);//
//
public FileWriter(FileDescriptor var1) {
super(new FileOutputStream(var1));
}// :
構造方法が異常であることがわかります.上のコードはすでにFileWriterのすべてのコードです.
主な方法:
ケース
/**
* IO ,
*/
public class Demo {
public static void main(String[] args) {
FileWriter writer = null;
FileWriter writer1 = null;
FileWriter writer2 = null;
FileWriter writer3 = null;
try {
//1. FileWriter ,
writer = new FileWriter(Config.PATH + "testFileWriter1.txt");//
//2.
writer.write("hello");
writer.flush();//3、 , //
// ,
writer1 = new FileWriter(Config.PATH + "testFileWriter1.txt");//
writer1.write(" -->1");
writer1.flush();
// ,
writer2 = new FileWriter(Config.PATH + "testFileWriter2.txt");
writer2.write(" -->2");
writer2.flush();
// , true false
writer3 = new FileWriter(Config.PATH + "testFileWriter2.txt", false);//
writer3.write(" -->");
writer3.flush();
writer3.write(" ");
writer3.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close(); //
writer1.close();
writer2.close();
writer3.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static final String PATH = "/Volumes/huang/studyfromGitHub/JavaForAndroid/JavaForAndroid/series10/src/main/java/files/";
デフォルトの書き込みモードが上書きであることを示します.
文字入力ストリーム-----Reader
同じように彼の孫類を見る.
FileReaderはInputStreamReaderから継承されます
構築方法は、すべてのソースコードでもあります.
// String 。 。 。
public FileReader(String var1) throws FileNotFoundException {
super(new FileInputStream(var1));
}// :FileReader fr = new FileReader(String file);
// , String
public FileReader(File var1) throws FileNotFoundException {
super(new FileInputStream(var1));
}// :FileReader fr = new FileReader(new File(str));//str String
//
public FileReader(FileDescriptor var1) {
super(new FileInputStream(var1));
}// :
主な方法:
public class Demo {
public static void main(String[] args) {
//1. FileReader
FileReader fileReader = null;
try {
//2. FileReader
fileReader = new FileReader(Config.PATH + "testFileWriter2.txt");// FileNotFoundException
//3.
int num = 0;
while ((num = fileReader.read()) != -1) {// , -1
System.out.print((char) num);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fileReader.close();//
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
結果
ケース----void read(char[]char)の使い方を示す
public class Demo {
public static void main(String[] args) {
FileReader fileReader = null;
try {
fileReader = new FileReader(Config.PATH + "testFileWriter2.txt");
char[] buffer = new char[4];// 4
int n = 0;
while ((n = fileReader.read(buffer)) != -1) {// 4 , -1
// , 0 ,
System.out.println(" "+n+" : "+new String(buffer,0,n));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
結果
読み取った内容は同じであることがわかります.
文字ストリーム(FileReader FileWriter)レプリケーション・ファイル・ケース
/**
* :copy Demo1
* :
*/
public class Demo {
//
public static final String PATH = "/Volumes/huang/studyfromGitHub/JavaForAndroid/JavaForAndroid/series10/src/main/java/com/example/Demo1.java";
public static final String FILENAME = "copyDemo1.java";
public static void main(String[] args) {
// 1. 、
FileReader fileReader = null;
FileWriter fileWriter = null;
try {
// 2.
fileReader = new FileReader(PATH);
fileWriter = new FileWriter(Config.PATH + FILENAME);// ,
char[] buffer = new char[6];
int len = 0;
while ((len = fileReader.read(buffer)) != -1) {//
fileWriter.write(buffer, 0, len);// ,
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
//
fileReader.close();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
結果
赤をつけるのは私のせいではありません.もともと赤をつけるべきでした.
文字出力ストリームにはバッファ---FileWriterとBufferedWriterが使用されます
構築方法
public BufferedWriter(Writer var1) {
this(var1, defaultCharBufferSize);
}
public BufferedWriter(Writer var1, int var2) {
super(var1);
if(var2 <= 0) {
throw new IllegalArgumentException("Buffer size <= 0");
} else {
this.out = var1;
this.cb = new char[var2];
this.nChars = var2;
this.nextChar = 0;
this.lineSeparator = (String)AccessController.doPrivileged(new GetPropertyAction("line.separator"));
}
}
見間違えなければ2つですが、BufferedWriterインスタンスを得るには、Writerインスタンスを渡さなければなりません.
運用例
public class Demo{
public static final String NAME = "testDemo5.txt";
public static void main(String[] args) {
//1.
FileWriter fileWriter = null;
BufferedWriter bufferedWriter = null;
try {
//2.
fileWriter = new FileWriter(Config.PATH + NAME);
bufferedWriter = new BufferedWriter(fileWriter);// , ( ), ( )
//
bufferedWriter.write(" ,");
bufferedWriter.newLine();//
bufferedWriter.write(" 。");
// ,
bufferedWriter.append(" ")
.append("\r
").append(" 。");
// : , , flush()
bufferedWriter.flush();//
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
bufferedWriter.close();// ,
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
結果
注意:バッファ・データは、メモリにデータを格納し、ファイルに書き込まれません.ストリームを閉じる前にflush()メソッドを実行する必要があります.皆さんはFileWriterがBufferedWriterに包装されていることに気づいたことがありますか.の次は、デコレーションモードについて少しご紹介します.