第Ⅰ章:IOストリーム
第II章:バイトストリーム
バイトのOutputStream出力ストリーム[2.1]
java.io.OutputStream
抽象クラスは、バイトスーパーすべての出力ストリームであり、情報が指定された宛先に書き込まれたバイト。それはバイトの基本的な方法共通の出力ストリームを定義します。
すべてのメソッド:
public void close()
:ストリームとすべてのシステムリソースは、関連するリリースで、この出力ストリームを閉じます。public void flush()
:この出力ストリームとバッファされた出力を書き込むバイト力をフラッシュします。public void write(byte[] b)
:指定されたバイト配列からこの出力ストリームへのb.lengthバイト。public void write(byte[] b, int off, int len)
この出力ストリームにLENバイトオフセットoffから始まる指定のバイト配列から。public abstract void write(int b)
:このバイトは、指定された出力ストリームに書き込まれます。
ヒント:
操作の流れが完了したときに近い方法は、システムリソースを解放するために、このメソッドを呼び出す必要があります。
2.2のFileOutputStream类
java.io.FileOutputStream extends OutputStream
:バイトのファイル出力ストリームは、メモリ効果は、ハードディスクのファイルにデータを書き込むことです。
共通のコンストラクタ:
FileOutputStream(String path)
:出力ファイルストリームで指定した名前のファイルへの書き込みデータを作成します。FileOutputStream(File file)
:データが書き込まれ、指定した出力ストリームにファイル作成Fileオブジェクトを表します。パラメータ:先の書き込みデータ
文字列名:先には、ファイルへのパスです
ファイルのファイル:先のファイルです
コンストラクタの役割:
図1は、第一のFileOutputStreamオブジェクトを作成します。
図2に示すように、空のファイルは、コンストラクタ/ドキュメント渡されたファイルパスに基づいて作成されます。
3、作成されたファイルへのFileOutputStreamオブジェクト指向はなります。
原則書き込みデータ:
Javaプログラム - > JVM(Java仮想マシン) - > OS(オペレーティングシステム) - > OSは、データを書き込むメソッドを呼び出します - >書き込みデータファイルへ
ライトラップ:
改行は、直接書き込むことができ、例えば=> Windows
:\ R&LT \ N-、Linux
:/ N-、Mac
:/ R&LT。
public class 字节流 {
public static void main(String[] args) throws IOException {
File f = new File("a.txt");
FileOutputStream fos = new FileOutputStream(f,true);
/* 在Windows中,数据带上\r\n即表示换行的意思 */
fos.write("\r\n你好".getBytes());
fos.close();
}
}
追加データの書き込み:
出力ストリーム・オブジェクトが作成されるたびに、ファイルは、例えば、ブールパラメータを追加したFileOutputStreamの唯一のパラメータ設定方法、データは各時間フォームに追加するように、原稿の内容をカバーするように書き込まれます。
public FileOutputStream(File file, boolean append)
public FileOutputStream(String name, booloean append)
これはtrue
、追加のデータを表し、false
それはデフォルトでは、元のデータを消去表しfalse
package file_io;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class 字节流 {
public static void main(String[] args) throws IOException {
File f = new File("D:\\Web学习资料\\first\\1-3-Java语言高级\\06-File类与IO流\\04 IO字节流\\a.txt");
/* FileOutputStream的构造方法中第二个参数即为追加开关,true表示追加,false表示覆盖 */
FileOutputStream fos = new FileOutputStream(f,true);
fos.write("你好,这是我写的一个数据".getBytes());
fos.close();
}
}
バイトの入力ストリーム入力ストリーム[2.3]
java.io.InputStream
抽象クラスは、バイトの入力ストリームのすべてのスーパークラスです。これはバイトの基本的な方法の一般的な入力ストリームを定義します。
一般的な方法:
int read()
:入力からのデータフローの次のバイトを読み込み。int read(byte[] b)
:バイトの一定数は、入力ストリームから読み出され、バッファ配列bに格納します。int read(byte[] b, int off, int len)
:有効なバイトが読めば、バイトの読み取りの有効数は、そうでない場合は、返される-1
void close()
:ストリームを解放するすべてのシステムリソースに関連付けられたこの入力ストリームを閉じます。
2.4のFileInputStreamクラス
java.io.FileInputStream extends InputStream
:ファイルのバイト入力ストリーム、読み出しデータがメモリにハードディスクの役割です。
コンストラクタ:
FileInputStream(String name)
:実際のファイルを使用してパスを開きます。FileInputStream(File file)
:実際のファイルを使用してFileオブジェクトを開きます。コンストラクタの役割:
1、FileInputStreamのオブジェクトを作成します。
2、読み取られる対象のファイルのコンストラクタを指定します。
例えば:
package file_io;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class 读取文件 {
public static void main(String[] args) throws IOException {
File f = new File("D:\\Web学习资料\\first\\1-3-Java语言高级\\06-File类与IO流\\04 IO字节流\\a.txt");
FileInputStream inputStream = new FileInputStream(f);
byte[] b = new byte[100];
int read = inputStream.read(b);
System.out.println(new String(b,0,read));
System.out.println(read);
inputStream.close();
}
}
2.5コピーファイルの例
ここでは、最初はバイトストリームの読み取りに入力配列から意図.AVIビデオファイルのオープンの成功を再現するためのヒントは、文字列になっテストし、その後に入れたバイト配列の中に文字列を変換した後、出力ストリームは、その場合には、そこに情報へのアクセスを通じて、問題ですが、次のようにもバイトストリームと文字ストリーム操作の違いを学びました:
- このよう.TXT、.DOC、PDFとできないなどのテキスト文書(バイトストリーム操作よりも効率的であるために)、多数のための主要な文字ストリーム。
- バイトストリームは、主にメディアファイル(オーディオ、ビデオ、画像...)などの非用紙の種類、上、ファイルのほぼすべてのタイプの上で動作することができます。
注意事項:
テキストファイルを読み込む場合、完全な文字が表示されない場合があり、漢字の顔があり、バイトストリームを使用した場合、漢字は、ストレージの複数のバイトを占めるかもしれないので、それは、問題がある可能性があります。ハンドルテキストファイルに設計された文字の単位でデータを読み書きするためにいくつかの文字ストリームクラスを提供するために、Javaはそう。
package file_io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class 拷贝任意文件 {
public static void main(String[] args) throws IOException {
// 给拷贝文件计时
long begin = System.currentTimeMillis();
// 创建一个读的字节流
FileInputStream inputStream = new FileInputStream("D:\\Web学习资料\\first\\1-3-Java语言高级\\06-File类与IO流\\04 IO字节流\\1_8_4_01_IO概述(概念&分类).avi");
// 创建一个写的字节流
FileOutputStream outputStream = new FileOutputStream("D:\\Web学习资料\\first\\1-3-Java语言高级\\06-File类与IO流\\04 IO字节流\\newFile.avi",true);
// 创建一个字节数组缓冲区,长度定为1024字节
byte[] b = new byte[1024];
// 定义len表示有效字节长度
int len = 0;
// 开始循环读取文件
while ((len = inputStream.read(b)) != -1) {
// 方法一:错误
// 先将有效的部分转化成字符串,然后再转化为字符数组
// 这种思路是有问题的,为什么呢?
// 因为视频格式读取的字节流若是转化成字符串,则会存在错误,导致拷贝的新文件打不开
// outputStream.write(new String(b,0,len).getBytes());
// 方法二:正确
// 将每次从输入流读取的字节数组中有效的部分取出来,然后写入输出流
outputStream.write(b,0,len);
}
// 关闭输出流
outputStream.close();
// 关闭输入流
inputStream.close();
// 计时结束
long end = System.currentTimeMillis();
System.out.println("本次拷贝文件共耗时:" + (end - begin) + "ms");
}
}
第3章:文字ストリーム
3.1文字入力ストリーム[リーダー]
java.io.Reader
抽象クラスは、読書のためのすべての文字ストリームのスーパークラスである、文字情報をメモリに読み込むことができます。これは、文字入力ストリームの基本的な機能の一般的な方法を定義します。
public void close()
:このストリームを閉じ、このストリームに関連するすべてのシステムリソースを解放します。public int read()
:int型への入力ストリームから文字、および転送この文字を読みます。public int read(char[] cbuf)
:文字の数は、入力ストリームから読み出され、文字配列CBUF、リードの有効長さの戻り値に格納します。
3.2 FileReaderのクラス
java.io.FileReader
クラスは、文字ファイルを読み込む便利なクラスです。システムのデフォルトの文字エンコーディングとデフォルトのバイトバッファが設定されています。
ヒント:
1.文字エンコード:マッピングルールが文字をバイト。中国のウィンドウシステムのデフォルトのエンコードはGBKのコーディングテーブルです。
コンストラクタ:
FileReader(File file):
FileReader(String filename):
パラメータ:文字列名=>ファイルパス、ファイルのファイル=>ファイルオブジェクト。
役割:1、FileReaderのオブジェクトと読み込まれるファイルにオブジェクトを作成します。
これらの手順を実行します。
- 読むべきFileReaderのオブジェクトコンストラクタバインドされたデータソースを作成します。
- 使用FileReaderのオブジェクトは、ファイルを読むために読みます。
- リソースのリリース。
例えば:
package file_io;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class FileReader读取单个字符 {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("D:\\个人资料\\aaa.txt");
// 方法一:
int len = 0;
// read方法读取出来的是字符的int类型字符数据,
// 如果需要还原成真实的数据,只需要强转一下即可
// 未读取到字符则返回-1
while((len = fr.read()) != -1) {
System.out.print((char)len);;
}
// 方法二:
int yxlen = 0;
char[] ch = new char[1024];
while((yxlen = fr.read(ch)) != -1) {
// 使用String类的构造方法,输出字符数组的内容
System.out.print(new String(ch,0,yxlen));
}
}
}
ライター文字出力ストリーム[3.3]
java.io.Writer
抽象クラスは、先に書き込まれた文字ストリーム指定された文字情報を書き込むために使用されるすべてのクラスのスーパークラスです。これは、文字出力ストリームの基本的な機能の一般的な方法を定義します。
void write(int c)
:単一の文字を書きますvoid write(char[] cbuf):
文字の配列を書きますabstract void write(char[] cbuf, int off, int len):
文字の配列の一部を書き込み、インデックス長さlen文字を発進void write(String str):
書き込み文字列void write(String str, int off, int len):
インデックス・オフ、len文字から始まる文字列の長さの部分を書き込みます。void flush():
ストリームをフラッシュしますvoid close():
出力ストリームを閉じて、それを更新するには
3.4てFileWriterクラス
java.io.FileWriter
クラスには、便利なクラスのファイルに文字を書き込むことです。システムのデフォルトの文字エンコーディングとデフォルトのバイトバッファが設定されています。
コンストラクタ:
FileWriter(File file):
FileWriterオブジェクトは、Fileオブジェクトを指定して構築しますFileWriter(File file, boolean append):
上記では、増加がさらに設けられていてもよいですFileWriter(String fileName):
FileWriterオブジェクトは、ファイルパス特定の構築FileWriter(String fileName, boolean append):
上記では、増加がさらに設けられていてもよいです
これらの手順を実行します。
作成
FileWriter
書き込まれる宛先データをバインドするオブジェクトコンストラクタを。使用
FileWriter
方法の書き込み、データは、メモリバッファに書き込まれる(プロセスにこの場合の内部バイト文字)。使用
FileWriter
方法フラッシュ、データ・バッファ・メモリ、ファイルへの更新が、リソースの解放(データは最初のリフレッシュメモリがファイルにバッファリングされます)
あなたはフラッシュを使用したり、近くにない場合は、メモリバッファにいくつかの時間のために滞在した後のコードの実行とデータは、離れて行くだろうし、文書に書かれることはありません!
フラッシュおよびクローズ方法の違い:
- フラッシュ:フラッシュバッファストリームオブジェクトは、引き続き使用することができます。
- クローズ:最初のフラッシュバッファ、リソースを解放するために、通知システム、ストリームオブジェクトは、もはや使用することができます。
改行なし:
- Windowsの場合:\ rを\ nは
- Linuxの場合:/ N
- Macの場合:/ R
(従来てFileWriterに使用される)、例えばAについて:
package file_io;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriter写入数据 {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("D:\\个人资料\\bbb.txt", true);
// 先写到内存缓冲区中,
// 如果后续没有使用flush或close,则内存缓冲区中的数据压根不会存到文件中去
fw.write("123456789",0,3);
fw.write(new char[]{'中', '国', '加', '油'},0,2);
// 将内存缓冲区中的数据刷新到文件中
fw.flush();
// 会先刷新一次
fw.close();
}
}
実施例II(データ書き込み動作が改行を行います)。
package file_io;
import java.io.FileWriter;
import java.io.IOException;
public class 使用FileWriter写入换行 {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("D:\\个人资料\\bbb.txt", true);
for (int i = 0; i < 10; i++) {
fw.write(97 + i);
// 写入换行符号
fw.write("\r\n");
}
fw.close();
}
}