IO流
IO:データの書き込みと書き込み(データの永続性)は、動作データのさまざまな特性に対してさまざまなストリームを採用します。
Fileクラスの使用
Fileクラスのオブジェクトは、ファイルまたはファイルディレクトリを表します。
//path 可以是绝对路径也可以是相对路径
File file= new File(path);
相対パスに関しては、IDEごとに相対パスが異なります。
EclipseとIDEAの相対パスは異なります。
-
IDEAの相対パス:
テストにJunitの単体テストメソッドを使用する場合、相対パスはModuleの下にあります。main
()を使用してテストする場合、相対パスは現在のプロジェクトにあります。 -
パス区切り文字
OSが異なれば、区切り文字も異なります。 -
ファイルクラスの一般的なメソッド
IOフローの原理とフロー分類
IOは、デバイス間のデータ転送を処理するために非常に使用されるテクノロジーです。ファイルの読み取りと書き込み、ネットワーク通信など。
データの操作はストリームで実行されます。
-
プログラムするファイル:入力
-
ファイルへのプログラム:出力
-
ネットワークからメモリへ:入力
-
ネットワークへのメモリ:出力
-
データベースへのメモリ:出力
プログラマの位置はプログラム、つまりメモリであり、位置が正しい場合にのみ正しいクラスを選択できます。
流れの分類:
さまざまなデータユニットによると
- バイトストリーム8ビットバイト
- 文字ストリーム16ビット文字
文字ストリームは、テキストの処理に適しています。バイトストリームは、画像、ビデオ、オーディオなどの処理に適しています。
さまざまな役割によると:
- ノードストリーム(ファイルクラスに直接作用します)
- 処理フロー(既存のフローに基づいて動作)
流れの方向に応じて分割します
- 入力ストリーム
- 出力ストリーム
ストリームの抽象クラス
- 文字読み
//1.实例化File类对象,指明要操作的文件
File file = new File("hello.txt");
//2.提供具体的流
FileReader fr = new FileReader(file);
//3.数据的读入
//read();返回读入的一个字符,如果达到文件末尾就返回-1
//无参数的read()方法,每次读入一个字符。
int data = fr.read();//将字符转化为int值
while(data != -1){
System.out.print((char)data);
data = fr.read();
}
//流的关闭
fr.close();
ストリームのリソースを確実に閉じるために、例外処理に「try catchfinally」が使用され、ストリームは「finally」で閉じられます。
概要:データ読み取り操作の場合、読み取られるファイルが存在する必要があることを確認する必要があります。存在しない場合、FileNotFoundExceptionが報告されます。
read()の操作をアップグレードし、readのオーバーロードメソッドを使用します
File file = new File("hello.txt");
//1.File类的实例化
//2. XXX流的实例化
FileReader fr = new FileReader(file);
//3. 读入的操作
//每次读入的字符的个数。
char[] cbuf = new char[5];
int len;
while((len = fr.read(cbuf)) != -1){
//错误写法:
//for(int i = 0; i<cbuf.length;i++){
// System.out.print(cbuf[i]);
//}
//正确写法
for(int i = 0;i<len;i++){
System.out.print(cbuf[i]);
}
//另一种写法
String str = new String(cbuf,0,len);
System.out.print(str);
}
//4. 流的关闭
メモリからハードディスク上のファイルにデータを書き込みます
//1.实例化File类对象,指明要写出到的文件
File file = new File("hello.txt");
//2.提供fileWriter对象,用于文件的写出
FileWriter fw = new FileWriter(file);
//3.写出操作
fw.witer("i have a dream");
//4.流资源的关闭
fw.close();
概要:ファイルが存在しない場合、入力プロセス中に自動的に作成されます。
存在する場合:ストリームで使用されるコンストラクターがFileWriter(file、false);の場合は上書きされず、FileWriter(file)が使用される場合は、元のファイルが上書きされます。
最初に読み込んで書き出す
@Test
public void method() throws IOException {
//指明读入文件的位置
File fileRead = new File("hello.txt");
//指明写出文件的位置
File fileWriter = new File("hello1.txt");
//创建输入流和输出流对象
FileReader fr = new FileReader(fileRead);
FileWriter fw = new FileWriter(fileWriter);
//创建字符数组
int len;
char[] chars = new char[5];
while ((len = fr.read(chars))!= -1){
//每次写入len个长度的字符
fw.write(chars,0,len);
}
//关闭流
fr.close();
fw.close();
}
実際のアプリケーションでは、最終的にtry catchを使用して、ストリームが確実に閉じられるようにします。