1.Fileクラス
java.io.File クラスは抽象ファイルやディレクトリのパス名は、主にファイルを、ファイルやディレクトリを作成、検索、削除するために使用され、指示されます。
コンストラクタ:
- (文字列のパス名)公開ファイル:与えられたことにより、パス名文字列の新しい抽象パス名の変換を作成するファイルのインスタンスを。
- (文字列の親、文字列の子供)公開ファイル:から親パス名文字列および子パス名文字列の新しい作成するために、ファイルのインスタンスを。
- (ファイルの親、文字列の子供)公開ファイル:から親抽象パス名および子パス名文字列は、新規作成するファイルのインスタンスを。
一般的な方法:
- 文字列getAbsolutePath公開() :戻り値は、ファイルの絶対パス名文字列を。
- 文字列のある、getPathパブリック() :このファイル変換のパス名文字列。
- 文字列のgetName公開は() :結果を返しますファイルの示されたファイルまたはディレクトリの名前を。
- ロング丈国民は() :結果を返すファイルのファイル表現の長さを。
- ブールは、EXISTSパブリック() :このファイルのファイルまたはディレクトリが実際に示された存在します。
- ブールisDirectoryパブリック() :このファイルは、ディレクトリかどうかを示します。
- パブリックブールISFILE()この:ファイルの文書が示されているかどうか。
- ブールでCreateNewFileパブリック() :だけその名前のファイルが既に存在していない場合場合は、新しい空のファイルを作成します。
- )(削除パブリックブール:削除ファイルのファイルまたはディレクトリが示されました。
- ブールは、mkdirパブリック() :これを作成ファイルの指定されたディレクトリを。
- パブリックブールmkdirs() :これを作成ファイルのいずれかの必要はなく、存在しない親ディレクトリを含め、表されるディレクトリを。
2.IOの流れ
IOが表すデータ・ストリームを送信します。JavaのI / O操作は、主java.ioパッケージの内容、入力、出力操作の使用を指します。
データフローは、入力ストリーム(読み取り)と出力ストリーム(書き込み)に分けることができます。データはバイトストリームと文字のストリームに分けることができます。
2.1バイトストリーム
バイトストリームは、任意のファイルを転送することができます。基礎となるトランスポートは、常に任意のバイナリデータファイルです。
バイト出力ストリーム
public FileOutputStream(String name)
:指定したファイル名に書き込むためのファイル出力ストリームを作成します。public FileOutputStream(String name, boolean append)
:指定したファイル名に書き込むためのファイル出力ストリームを作成します。
FileOutputStream書き込み方法:
- (int型b)の記述:バイトを書き込みます。
- 書き込み(バイト[] B):バイト配列を書き込みます。
- ライトアレイの長さを指定:書き込み(バイト[] B、INT lenは、オフINT)。
上書き:
輸入java.io.FileOutputStreamは、
インポートにjava.io.IOException;
public class TestFileOutputStream { public static void main(String[] args) throws IOException{ //使用File对象创建流对象 // File f = new File("1.txt"); // FileOutputStream fos = new FileOutputStream(f); //使用文件名称创建流对象 FileOutputStream fos2 = new FileOutputStream("2.txt"); //写入字节必须是byte数组 字符串串转byte数组 byte[] b = "abcde".getBytes(); //写入全部字节 // fos2.write(b); //写入指定字节 fos2.write(b,2,3);
fos2.close(); } }
追加写入:
import java.io.FileOutputStream; import java.io.IOException; public class TestFileOutputStream { public static void main(String[] args) throws IOException{ //使用文件名称创建流对象 FileOutputStream fos2 = new FileOutputStream("2.txt",true); //写入字节必须是byte 字符串串转byte数组 byte[] b = "我是追加写入的内容".getBytes(); //写入全部字节 fos2.write(b); fos2.close(); } }
追加换行写入:
import java.io.FileOutputStream; import java.io.IOException; public class TestFileOutputStream { public static void main(String[] args) throws IOException{ //使用文件名称创建流对象 FileOutputStream fos2 = new FileOutputStream("2.txt",true); //写入字节必须是byte数组 字符串串转byte数组 byte[] b = "我是换行追加写入的内容".getBytes(); //换行 fos2.write("\r\n".getBytes()); //写入全部字节 fos2.write(b);
fos2.close();
} }
字节输入流
public abstract int read()
: 从输入流读取数据的下一个字节。public int read(byte[] b)
: 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。
FileInputStream构造方法:
FileInputStream写入方法:
- read():每次读取一个字节。
import java.io.IOException; import java.io.FileInputStream; public class TestFileInputStream { public static void main(String[] args) throws IOException{ //创建文件流对象 FileInputStream fis = new FileInputStream("1.txt"); //读取 while (fis.read()!= -1){ int a = fis.read(); System.out.println((char) a); }
fis.close(); } }
import java.io.IOException; import java.io.FileInputStream; public class TestFileInputStream { public static void main(String[] args) throws IOException{ //创建文件流对象 FileInputStream fis = new FileInputStream("1.txt"); //创建长度为2的字节数组 byte[] b = new byte[2]; //读取 while (fis.read(b)!= -1){ System.out.println(new String(b)); } fis.close(); } }
2.2 字符流
当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。
字符输入流Reader
Reader基本方法:
public int read()
: 从输入流读取一个字符。public int read(char[] cbuf)
: 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。
java.io.FileReader
类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
FileReader构造方法:
void write(char[] cbuf)
写入字符数组。abstract void write(char[] cbuf, int off, int len)
写入字符数组的某一部分,off数组的开始索引,len写的字符个数。void write(String str)
写入字符串。void write(String str, int off, int len)
写入字符串的某一部分,off字符串的开始索引,len写的字符个数。void flush()
刷新该流的缓冲。void close()
关闭此流,但要先刷新它。
FileWriter(String fileName)
: 创建一个新的 FileWriter,给定要读取的文件的名称。
FileWriter方法类似于FileOutputStream。
2.3 缓冲流
-
字节缓冲流:
BufferedInputStream
,BufferedOutputStream
-
字符缓冲流:
BufferedReader
,BufferedWriter
缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。
我们只需要使用相应构造方法即可,其他读写操作方法和基本流一样。
public BufferedInputStream(InputStream in)
:创建一个 新的缓冲输入流。public BufferedOutputStream(OutputStream out)
: 创建一个新的缓冲输出流。
字符 流构造方法:
public BufferedWriter(Writer out)
: 创建一个新的缓冲输出流。
2.4 转换流
文件存在不同的编码,读取文件时,如果未使用IDEA默认编码,就会导致读取结果异常,出现乱码。
构造方法:
InputStreamReader(InputStream in)
: 创建一个使用默认字符集的字符流。InputStreamReader(InputStream in, String charsetName)
: 创建一个指定字符集的字符流。
转换流java.io.OutputStreamWriter
,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。
构造方法:
OutputStreamWriter(OutputStream in)
: 创建一个使用默认字符集的字符流。OutputStreamWriter(OutputStream in, String charsetName)
: 创建一个指定字符集的字符流。
2.5 序列化
反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。对象的数据
、对象的类型
和对象中存储的数据
信息,都可以用来在内存中创建对象。
java.io.ObjectOutputStream
类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。
构造方法:
public ObjectOutputStream(OutputStream out)
: 创建一个指定OutputStream的ObjectOutputStream。
使用方法:
序列化要求:
- 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用
transient
关键字修饰。
ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象。
构造方法:
public ObjectInputStream(InputStream in)
: 创建一个指定InputStream的ObjectInputStream。
如果能找到一个对象的class文件,我们可以进行反序列化操作,调用ObjectInputStream
读取对象的方法:
public final Object readObject ()
: 读取一个对象。
- 该类的序列版本号与从流中读取的类描述符的版本号不匹配
- 该类包含未知数据类型
- 该类没有可访问的无参数构造方法
2.7 打印流
PrintStream类
构造方法:
public PrintStream(String fileName)
: 使用指定的文件名创建一个新的打印流。
System.out
就是PrintStream
类型的,只不过它的流向是系统规定的,打印在控制台上。我们可以使用 System.setOut()改变流向。
import java.io.IOException; import java.io.PrintStream; public class TestPrintStream { public static void main(String[] args) throws IOException{ // 创建打印流,指定文件的名称 PrintStream ps = new PrintStream("1.txt"); // 设置系统的打印流流向,输出到ps.txt System.setOut(ps); // 调用系统的打印流,ps.txt中输出97 System.out.println(97); } }
温馨提示
- 如果您对本文有疑问,请在评论部分留言,我会在最短时间回复。
- 如果本文帮助了您,也请评论关注,作为对我的一份鼓励。
- 如果您感觉我写的有问题,也请批评指正,我会尽量修改。