1、Writer(写)
1.1、FileWriter
(1)简要代码(由于流操作可能会有异常发生,简要代码中先将异常抛出,暂不进行处理):
import java.io.*;
public class Demo
{
public static void main(String[] args) throws Exception
{
char[] a={'a','b','c'};
//1、创建一个FileWriter对象,该对象一被初始化,就必须要明确被操作的文件,
//而且该文件会被创建到指定目录下,如果该目录下已有同名文件,则将其覆盖,
//其实该步就是在明确数据要存放的目的地。
FileWriter f=new FileWriter("abc.txt");
//2、调用写入方法,将字符串等对象写入到流中。
f.write("asfdasdfas");
//3、刷新流对象中缓冲区中的数据,将数据刷到目的地中。
f.flush();
f.write(a,1,2);
f.flush();
//4、关闭流资源,但是在关闭之前会刷新一次流对象中缓冲区中的数据,将数据刷新到目的地中,
//和flush()区别:flush刷新后,流可以继续使用;close()后,流不可以被使用
f.close();
}
}
(2)对流的异常处理
import java.io.*;
public class IoThreateDemo
{
public static void main(String[] args)
{
FileWriter f = null; //1、在外部建立引用
try
{
f=new FileWriter("k\\:abc.txt");//2、在内部进行初始化
f.write("afdas"); //3、流操作
f.flush();
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{//4、由于关闭流是个必须的操作,因此应当将close()放到finally语句中
try
{//5、由于close()方法也有异常声明,所以也应该处理
if(f!=null) //6、一定要判断流对象是否为null
f.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
}
(3)对已有文件的数据续写
即:
FileWriter f=new FileWriter("k\\:abc.txt",true);
2、Reader(读)
2.1、FileReader
import java.io.*;
public class Demo
{
public static void main(String[] args)
{
FileReader f=null;
try
{
f=new FileReader("abc.txt");
//int c;
//while((c=f.read())!=-1) //方法一:read()方法每次读取一个字符,并将代表其的整数返回,
// System.out.print((char)c);//若读到末尾(有特殊标识,系统定义的),则返回-1
char[] c=new char[22];
int num=f.read(c); //方法二:read(char[] buf)方法每次将文件中的字符按照预先
System.out.println(num); //开辟好的字符数组存入,返回实际存入字符数组中字符的个数,
System.out.println(c); //如果到结尾,则返回-1。
}
catch(Exception e1)
{
System.out.println("打开资源失败");
}
finally
{
try
{
if(f!=null)
f.close();
}
catch(IOException e2)
{
System.out.println("关资源失败");
}
}
}
}
结果如下:
20表明文件里有20个字符,由于在windows系统里,换行为\r\n,则其占两个字符,因此为20个字符;同时因为开辟的是22字符的空间,所以最后又输出两个空格。
3、Copy练习
import java.io.*;
public class Copy
{
public static void main(String[] args)
{
FileWriter fw=null; //写流对象
FileReader fr=null; //读流对象
try
{
fw=new FileWriter("C:\\Users\\LJ_Z\\Desktop\\abcd.txt"); //写入目标文件A
fr=new FileReader("abc.txt"); //读出目标文件B
char[] ch=new char[1024];
int num;
while((num=fr.read(ch))!=-1)
fw.write(ch,0,num);
fw.flush();
}
catch(IOException e)
{
throw new RuntimeException();
}
finally
{
try
{//关写流对象的操作
if(fw!=null)
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
try
{//关读流对象的操作
if(fr!=null)
fr.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}