一、字符流的读写
1、写入字符流步骤(FileWriter为例)
a、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件。且该目录下如果已有同名文件,则同名文件将被覆盖。其实该步就是在明确数据要存放的目的地。
(注意:创建对象,创建文件时,系统会判断是否存在该路径,如果不错在就会报IO异常。因此要对异常做处理。)
b、调用write(String s)方法,将字符串写入到流中。
c、调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
d、调用close()方法,关闭流资源。但是关闭前会刷新一次内部的缓冲数据,并将数据刷新到目的地中。
2、close()和flush()区别:
flush()刷新后,流可以继续使用;
而close()刷新后,将会关闭流,不可再写入字符流。
3、示例:
import java.io.FileWriter;
import java.io.IOException;
/**
* 在硬盘上创建一个文件并写入一些文字数据。
* 练习字符流操作步骤
* @author Administrator
*/
public class FileWriterTest
{
public static void main(String[] args) throws IOException
{
//1.创建一个FileWriter对象,
FileWriter fw = new FileWriter("C:\\demo.txt");
//2.调用write(string)方法,将字符串写入到流中。
fw.write("abcdefg");
//3.调用flush()方法,刷新该流的缓冲,将数据刷新到目的地中。
fw.flush();
//4.flush()方法可以继续用该流写入内容
fw.write("flush可以继续写入内容");
fw.flush();
/*
* 而使用了close()方法则先刷新该流的缓冲,然后关闭该流。因此关闭后不可以续写
* fw.close()
* fw.write("不能续写");
*/
}
}
4、拷贝图例
示例:
import java.io.FileReader;
import java.io.FileWriter;
/**
* 复制步骤
* 将C盘下文件数据存储到D盘的一个文件中
* 步骤:
* 1、在D盘创建一个文件,用于存储C盘文件中的数据;
* 2、定义读取流和C盘文件关联;
* 3、通过不断的读写王岑数据存储;
* 4、关闭资源
*
* @author Administrator
*/
public class CopyTest
{
public static void main(String[] args) throws Exception
{
// copy1();
copy2();
}
//用缓存读取实现copy
public static void copy2()
{
FileWriter fw = null;
FileReader fr = null;
try
{
fr = new FileReader("C:/demo.txt");
fw = new FileWriter("C:/demo_copy.txt");
char[] buf = new char[1024];
int length = 0;
while (-1 != (length = fr.read(buf)))
{
fw.write(buf,0,length);
}
} catch (Exception e)
{
throw new RuntimeException("读写失败");
}
finally{
if(fr != null)
try
{
fr.close();
} catch (Exception e2)
{
// TODO: handle exception
}
if(fw != null)
try
{
fw.close();
} catch (Exception e2)
{
// TODO: handle exception
}
}
}
//从C盘读取一个字符,就往D盘写一个字符。
public static void copy1() throws Exception
{
//创建一个文件用于存储读取的数据。
FileWriter fw = new FileWriter("C:/demo_copy.txt");
//定义读取流和源文件关联
FileReader fr = new FileReader("C:/demo.txt");
int length = 0;
while ((length = fr.read()) != -1)
{
fw.write(length);
}
fw.close();
fr.close();
}
}