目录
FileInputStream FileOutputStream
FileOutputStream类
FileOutputStream续写
FileInputStream类
FileWriter FileReader
FileWriter写
FileWriter续写
FileWriter换行
FileWriter关闭和刷新
FileReader读
FileReader读取指定长度
当你创建一个流对象时,必须传入一个文件路径。对于FileReader和FileInputStream 来说,如果该文件不存在,则报FileNotFoundException。如果传入的是一个目录,则会报IOException异常。
FileInputStream FileOutputStream
FileOutputStream类
java.io.FileOutputStream
类是文件输出流,用于将数据写入到文件。
==支持各种类型的文件==。
-
public FileOutputStream(File file)
:创建文件输出流以写入由指定的 File对象表示的文件。 -
public FileOutputStream(String name)
: 创建文件输出流以指定的名称写入文件。 -
public FileOutputStream(File file, boolean append)
: 创建文件输出流以写入由指定的 File对象表示的文件。 -
public FileOutputStream(String name, boolean append)
: 创建文件输出流以指定的名称写入文件。
当你创建一个流对象时,必须传入一个==文件==路径。如果传入的是一个目录,则会报IOException异常。
如果该文件不存在,会创建该文件。如果这个文件存在,可以覆盖这个文件或在文件后面续写内容。
@Testpublic void test03()throws IOException {// 使用文件名称创建流对象FileOutputStream fos = new FileOutputStream("fos.txt");// 字符串转换为字节数组byte[] b = "abcde".getBytes();// 写出从索引2开始,2个字节。索引2是c,两个字节,也就是cd。fos.write(b,2,2);// 关闭资源fos.close();}
FileOutputStream续写
public class FOSWriteAppend {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象FileOutputStream fos = new FileOutputStream("fos.txt",true);// 字符串转换为字节数组byte[] b = "abcde".getBytes();fos.write(b);// 关闭资源fos.close();}
}
//这段程序如果多运行几次,每次都会在原来文件末尾追加abcde
FileInputStream类
java.io.FileInputStream
类是文件输入流,从文件中读取字节。
-
FileInputStream(File file)
: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。 -
FileInputStream(String name)
: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
@Testpublic void test04()throws IOException{// 使用文件名称创建流对象.FileInputStream fis = new FileInputStream("read.txt"); // 文件中为abcde// 定义变量,作为有效个数int len;// 定义字节数组,作为装字节数据的容器byte[] b = new byte[2];// 循环读取while (( len= fis.read(b))!=-1) {// 每次读取后,把数组的有效字节部分,变成字符串打印System.out.println(new String(b,0,len));// len 每次读取的有效字节个数}// 关闭资源fis.close();}
FileWriter FileReader
字符流,处理文本数据
FileWriter写
java.io.FileWriter
类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
@Testpublic void test02()throws IOException {// 使用文件名称创建流对象FileWriter fw = new FileWriter("fw.txt");// 字符串转换为字节数组char[] chars = "尚硅谷".toCharArray();// 写出字符数组fw.write(chars); // 尚硅谷// 写出从索引1开始,2个字符。fw.write(chars,1,2); // 硅谷// 关闭资源fw.close();}
FileWriter续写
-
public FileWriter(File file,boolean append)
: 创建文件输出流以写入由指定的 File对象表示的文件。 -
public FileWriter(String fileName,boolean append)
: 创建文件输出流以指定的名称写入文件。
这两个构造方法,参数中都需要传入一个boolean类型的值,true
表示追加数据,false
表示清空原有数据。这样创建的输出流对象,就可以指定是否追加续写了,代码使用演示:
@Testpublic void test01()throws IOException {// 使用文件名称创建流对象,可以续写数据FileWriter fw = new FileWriter("fw.txt",true);// 写出字符串fw.write("尚硅谷真棒");// 关闭资源fw.close();}
FileWriter换行
\r\n换行
public class FWWriteNewLine {public static void main(String[] args) throws IOException {// 使用文件名称创建流对象,可以续写数据FileWriter fw = new FileWriter("fw.txt");// 写出字符串fw.write("尚");// 写出换行fw.write("\r\n");// 写出字符串fw.write("硅谷");// 关闭资源fw.close();}
FileWriter关闭和刷新
【注意】FileWriter与FileOutputStream不同。因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush
方法了。
-
flush
:刷新缓冲区,流对象可以继续使用。 -
close
:先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
// 刷新fw.flush();// 关闭资源fw.close();
FileReader读
-
FileReader(File file)
: 创建一个新的 FileReader ,给定要读取的File对象。 -
FileReader(String fileName)
: 创建一个新的 FileReader ,给定要读取的文件的名称。
@Testpublic void test01() throws IOException {// 使用文件名称创建流对象FileReader fr = new FileReader("read.txt");// 定义变量,保存数据int b;// 循环读取while ((b = fr.read())!=-1) {System.out.println((char)b);}// 关闭资源fr.close();}
FileReader读取指定长度
@Testpublic void test02()throws IOException {// 使用文件名称创建流对象FileReader fr = new FileReader("read.txt");// 定义变量,保存有效字符个数int len;// 定义字符数组,作为装字符数据的容器char[] cbuf = new char[2];// 循环读取while ((len = fr.read(cbuf)) != -1) {System.out.println(new String(cbuf, 0, len));//读取数组中有效数据长度的内容,防止最后一次循环读取数量字符数量不够覆盖不全数组,使得读出}// 关闭资源fr.close();}