A、Fileクラス
java.io.File
クラスは抽象ファイルとディレクトリのパス名は、主にファイルやディレクトリ、見つけて削除ファイルを作成するために使用される、示しています。
1.1コンストラクタ
public File(String pathname); // 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child); // 从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child); // 从父抽象路径名和子路径名字符串创建新的 File实例。
1.2一般的な方法
/// API
// 获取功能
public String getAbsolutePath(); // 返回此File的绝对路径名字符串。
public String getPath(); // 将此File转换为路径名字符串。
public String getName(); // 返回由此File表示的文件或目录的名称。
public long length(); // 返回由此File表示的文件的长度。若File对象表示目录,则返回值未指定。
// 判断功能
public boolean exists(); // 此File表示的文件或目录是否实际存在。
public boolean isDirectory(); // 此File表示的是否为目录。
public boolean isFile(); // 此File表示的是否为文件。
// 创建删除功能
public boolean createNewFile(); // 当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete(); // 删除由此File表示的文件或目录。
public boolean mkdir(); // 创建由此File表示的目录。
public boolean mkdirs(); // 创建由此File表示的目录,包括任何必需但不存在的父目录
// 目录的遍历
public String[] list(); // 返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles(); // 返回一个File数组,表示该File目录中的所有的子文件或目录。
1.3例
- マルチレベルディレクトリの再帰を印刷
public static void printDir(File dir) {
// 获取子文件和目录
File[] files = dir.listFiles();
// 循环打印
for (File file : files) {
// 判断
if (file.isFile()) {
// 是文件,输出文件绝对路径
// if (file.getName().endsWith(".java")) // 筛选后缀是 .java 的文件
System.out.println("文件名:" + file.getAbsolutePath());
} else {
// 是目录,输出目录绝对路径
System.out.println("目录:" + file.getAbsolutePath());
// 继续遍历,调用printDir,形成递归
printDir(file);
}
}
}
- 使用ファイルには、フィルタリング
java.io.FileFilter
フィルタファイルへのインタフェースを:
public static void printDir2(File dir) {
// Lambda表达式优化
// File[] files = dir.listFiles(f -> f.getName().endsWith(".java") || f.isDirectory());
File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".java") || pathname.isDirectory();
}
});
// 循环打印
for (File file : files) {
// 判断
if (file.isFile()) {
System.out.println("文件名:" + file.getAbsolutePath());
} else {
printDir2(file);
}
}
}
Javaの7本の紹介FileクラスファイルI / O操作の代わりに使用するクラスを扱ういくつかの新しいファイル:チュートリアルのJavaのNIOシリーズ
import java.nio.file.DirectoryStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
第二に、基本的なI / O:バイトストリーム、文字ストリーム
入力ストリーム | 出力ストリーム | |
バイトストリーム | InputStream | OutputStream |
文字ストリーム | 読者 | ライター |
2.1バイトストリーム
貯蔵中のすべてのファイルのデータ(テキスト、画像、ビデオなど)は、2進数形式で格納されている1バイトです。したがって、任意のファイルは、ストリームデータ、バイト送信することができます。
2.1.1バイト出力ストリームのOutputStream
java.io.OutputStream
抽象クラスは、バイトスーパーすべての出力ストリームであり、情報が指定された宛先に書き込まれたバイト。それはバイトの基本的な機能の一般的な方法で出力ストリームを定義します。
public void close();
public void flush();
public void write(byte[] b);
public void write(byte[] b, int off, int len);
public abstract void write(int b);
2.1.2のFileOutputStream类
java.io.FileOutputStream
ファイルにデータを書き込むためのクラスファイル出力ストリーム。
public FileOutputStream(File file);
public FileOutputStream(String name);
- バイト書込み:書込み方法。
- プログラムが実行されるたびに、データがターゲットファイルにクリアされ、出力ストリームオブジェクトを作成します。コンストラクタにも渡すことができ
boolean append
、追加の書き込みを示すパラメータを。 - ライトラップ:
fos.write("\r\n".getBytes());
バイト入力ストリームの2.1.3入力ストリーム
java.io.InputStream
抽象クラスは、バイト情報をメモリに読み込むことができ、バイトのすべての入力ストリームのスーパークラスです。これは、バイトの入力ストリームの基本機能の共通の方法を定義しています。
public void close();
public abstract int read();
public int read(byte[] b);
2.1.4のFileInputStreamクラス
java.io.FileInputStream
バイトのクラスファイル入力ストリームをファイルから読み込みます。
FileInputStream(File file);
FileInputStream(String name);
- 読み出しはバイト型:intに昇格読み出し方法、データのバイトを読み取ることができるたびに、ファイルの終わりが読み込まれ、それは-1を返します。
- 読み出しバイト配列:(バイト[] B)を読むとき、bはアレイへの各リードバイトの長さは、端部に読み出されるリード有効バイト数を返す、-1を返します。
2.2文字ストリーム
漢字など一部の文字は、ストレージの複数のバイトを占めることができます。ハンドルテキストファイルに設計された文字の単位でデータを読み書きするためにいくつかの文字ストリームクラスを提供するために、Javaはそう。
2.2.1文字出力ストリームライター
java.io.Writer
抽象クラスは、文字のストリームを書き込むために使用されるすべてのクラスのスーパークラスです。
void write(int c);
void write(char[] cbuf);
abstract void write(char[] cbuf, int off, int len);
void write(String str);
void write(String str, int off, int len);
void flush();
void close();
2.2.2てFileWriterクラス
java.io.FileWriter
クラスには、便利なクラスのファイルに文字を書き込むことです。システムのデフォルトの文字エンコーディングとデフォルトのバイトバッファが設定されています。
FileWriter(File file);
FileWriter(String fileName);
- 書かれた文字:writeメソッド。
- フラッシュ:フラッシュバッファ;
- 近く:最初のフラッシュバッファ、リソースを解放し、その後通知システム。
文字ストリームは、テキストのみのファイルを操作することができ、写真はその上の非テキストファイル、動画などを操作することはできません。我々は単にテキストファイルを読み書きするとき、バイトストリームを使用して、他の文字ストリーム
2.2.3文字入力ストリームリーダー
java.io.Reader
抽象クラスは、文字はすべてのクラスのスーパークラスをストリーム読み取るために使用されます。
public void close();
public int read();
public int read(char[] cbuf);
2.2.4 FileReaderのクラス
java.io.FileReader
クラスは、文字ファイルを読み込む便利なクラスです。システムのデフォルトの文字エンコーディングとデフォルトのバイトバッファが設定されています。
FileReader(File file);
FileReader(String fileName);
- 文字を読み込み:読み取り()メソッドは、データが読み込まれるファイルの最後に、int型を強化するために、たびに文字を読み取ることができ、それは-1を返します。
- 文字列を使用して読み取る:読み取り(CHAR [] CBUF)を 、 各キャラクタBの長さは、配列および有効な文字の数を読み取るに戻るに読み込まれ、
最後まで読んで、リターン-1。
あなたは、ファイル入力ストリームオブジェクト、そうでない場合は、ファイルを作成すると、スロー
FileNotFoundException
;ないファイルが自動的に作成されている場合は、ファイル出力ストリームオブジェクトを作成するとき。
トライして、リソース
第三に、ストリームバッファ、転流、シリアライズされたストリームは、ストリームを印刷します
3.1バッファフロー
また、高流量としても知られている緩衝ストリームは、4つの基本であるFileXxx
エンハンスメントストリーム、ストリームは、データ型の分類によれば、4です。
- バイトストリーム
BufferedInputStream
バッファ:、BufferedOutputStream
- バッファ文字
BufferedReader
ストリーム:、BufferedWriter
ストリームバッファの基本原理、あなたはストリームオブジェクトを作成するときで、内蔵されたバッファ配列のデフォルトサイズリーディング、ライティングの効率を改善するために、システムIOの数を減らすために、読み書きによって作成されます。
3.1.1バイトストリームバッファ
コンストラクタ:
public BufferedInputStream(InputStream in); // 创建一个新的缓冲输入流。
public BufferedOutputStream(OutputStream out); // 创建一个新的缓冲输出流。
バイトストリームはバッファを読んで、基本的な方法は、同じストリームです。
3.1.2文字バッファの流れ
コンストラクタ
public BufferedReader(Reader in); // 创建一个新的缓冲输入流。
public BufferedWriter(Writer out); // 创建一个新的缓冲输出流。
基本的な方法は、通常の文字バッファの文字ストリームが流れ呼ばれると一致しています。ユニークな方法:
/// BufferedReader:
public String readLine(); // 读一行文字
/// BufferedWriter:
public void newLine(); // 写一行行分隔符,由系统属性定义符号
3.2転流
3.2.1にInputStreamReader类
転流はjava.io.InputStreamReader
、ブリッジは文字のバイトストリームから流れている、読者のサブクラスです。これは、指定された文字セットを使用してバイト文字にそれをデコード読み込みます。誰の文字セットは、名前で指定された、またはプラットフォームのデフォルトの文字セットを受け入れることができます。
InputStreamReader(InputStream in); // 创建一个使用默认字符集的字符流。
InputStreamReader(InputStream in, String charsetName); // 创建一个指定字符集的字符流
3.2.1のOutputStreamWriter类
転流はjava.io.OutputStreamWriter
、作家のサブクラスで、ブリッジは、文字から流れるバイトストリームです。指定された文字セットバイト文字エンコーディングを使用します。誰の文字セットは、名前で指定された、またはプラットフォームのデフォルトの文字セットを受け入れることができます。
OutputStreamWriter(OutputStream in); // 创建一个使用默认字符集的字符流。
OutputStreamWriter(OutputStream in, String charsetName); // 创建一个指定字符集的字符流。
3.3シリアル
Javaはオブジェクトのシリアル化メカニズムを提供します。オブジェクトは、バイトの配列、配列を含むバイトで表現されてもよい对象的数据
、对象的类型
および对象中存储的属性
その他の情報。ファイルに書き込まれたバイトのシーケンスの後、ファイルは、永続オブジェクトに格納された情報に対応します。
逆に、バイトシーケンスがまた、ファイルの後ろから読んで並べ替えることができ、それがデシリアライズされます。对象的数据
、对象的类型
そして对象中存储的属性
情報がメモリ内のオブジェクトを作成するために使用することができます。
3.3.1 ObjectOutputStreamの类
java.io.ObjectOutputStream
クラス、Javaオブジェクトのプリミティブデータ型には、ストレージオブジェクトを持続、ファイルに書き込まれます。
コンストラクタ:
public ObjectOutputStream(OutputStream out); // 创建一个指定OutputStream的ObjectOutputStream
/// 示例:
FileOutputStream fileOut = new FileOutputStream("employee.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
- オブジェクトをシリアル化するために、2つの条件が満たされなければなりません
- クラス実装しなければならない
java.io.Serializable
インターフェイスを、シリアライズはマーカーインターフェイスで、クラスはこのインタフェースを実装していませんがどのような状態の直列化または直列化復元がスローすることはありませんNotSerializableException
。 - クラスのすべてのプロパティは、シリアライズ可能である必要があります。プロパティをシリアル化する必要がない場合、そのプロパティは使用して、過渡的にマークされなければならない
transient
キーワードの変更を
- 書き込みオブジェクトのメソッド
public final void writeObject (Object obj); // 将指定的对象写出
3.3.2 ObjectInputStreamのクラス
java.io.ObjectInputStream
ストリームをデシリアライズ、元のデータ系列を使用する前にオブジェクトを復元したObjectOutputStream。
コンストラクタ:
public ObjectInputStream(InputStream in); // 创建一个指定InputStream的ObjectInputStream。
あなたは、クラスファイルのオブジェクトを見つけることができるならば、我々は、オブジェクトのメソッド呼び出しを読み取るための操作、のObjectInputStreamをデシリアライズすることができます:
public final Object readObject (); // 读取一个对象
JVMがオブジェクトをデシリアライズすることができ、クラスのクラスファイルを見つけることができなければなりません。あなたは、クラスファイルのこのタイプを見つけることができない場合は、投げるClassNotFoundException
例外を。
また、時にJVMのデシリアライズは、クラスファイルを見つけるために、オブジェクトが、クラスファイルは、直列化復元操作は、失敗投げます、シリアライズされたオブジェクトの後に変更されているInvalidClassException
例外を。この例外は、次の理由で発生します。
- クラス記述子のバージョン番号のようなシリアルバージョン番号が一致していないストリームから読み込まれ
- このクラスは、不明なデータ型が含まれています
- いいえパラメーターこのような構造は、アクセス方法ではないではありません
Serializable
シリアルバージョン番号を提供してシリアライゼーションクラスを必要とするインタフェース。serialVersionUID
ターゲットクラスのバージョンと対応する一致の配列ことを確認するオブジェクトのバージョン番号。例:
public class Employee implements java.io.Serializable {
// 加入序列版本号
private static final long serialVersionUID = 1L;
public String name;
public String address;
// 添加新的属性 ,重新编译, 可以反序列化,该属性赋为默认值
public int eid;
public void addressCheck() {
System.out.println("Address check : " + name + " ‐‐ " + address);
}
}
3.4印刷の流れ
我々は通常、コンソールの出力を印刷し、この方法は、完成した印刷方法のprintlnを呼び出すことで、二つの方法が由来するjava.io.PrintStream
簡単で便利出力され、さまざまなデータ型の値を印刷することができクラス。
3.4.1のPrintStreamクラス
コンストラクタ:
public PrintStream(String fileName); // 使用指定的文件名创建一个新的打印流。
- System.outはPrintStreamのタイプですが、それは、システムのフロー要件、コンソール上の印刷です。
私たちは、それが流れて変更することができます。
public class PrintDemo {
public static void main(String[] args) throws IOException {
// 调用系统的打印流,控制台直接输出97
System.out.println(97);
// 创建打印流,指定文件的名称
PrintStream ps = new PrintStream("ps.txt");
// 设置系统的打印流流向,输出到ps.txt
System.setOut(ps);
// 调用系统的打印流, ps.txt中输出97
System.out.println(97);
}
}
また、2つのより包括的なブログを置きます:
ジェーン帳:JavaのIOがより難しいことではありません、これを読んで
CSDN:Java8 I / Oソース-全体構成