1、FileWriter
创建一个FileWriter对象,该对象以被初始化就必须要明确被操作的文件
而且该文件被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
Filewriter fw=newFileWriter("demo.txt");
(1) fw.write("ass"); //调用write方法,将字符串写入到流中
(2)fw.flush(); 刷新流对象中的缓冲中的数据,将数据刷新到目的地
(3)fw.close();关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷新到目的地。
和flush的区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭
(4) FileWriter fw=newFileWriter("demo.txt",true);
传递一个true参数,代表不覆盖已有的文件,并在已有的文件末尾处进行数据续写
(5) fw.write("\r\n你好");
\r\n所写的数据换行后写
public static void main(String[] args) throws IOException
{
//传递一个true参数,代表不覆盖已有的文件,并在已有的文件末尾处进行数据续写
FileWriter fw=new FileWriter("demo.txt",true); //创建写入流对象
fw.write("\r\n你好"); //向写入流中写入你好
fw.close();//关闭写入流
}
2、FileReader
创建一个文件读取流对象,和指定名称的文件相关联。
要保证该文件是已经存在的,如果不存在,会发生异常FileNotfoundException
FileReaderfr=new FileReader("demo.txt");
(1)read():一次读一个字符。而且会自动往下读
(2)read(char[]):定义一个字符数组,用于存储读取字符。
该read(char[]) 返回的是读到的字符个数
public static void main(String[] args) throws IOException {
//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件是已经存在的,如果不存在,会发生异常FileNotfoundException
FileReader fr=new FileReader("demo.txt");
//调用读取流对象的read方法
//read():一次读一个字符。而且会自动往下读
int ch=0;
while((ch=fr.read())!=-1)
{
System.out.println((char)ch);
}
fr.close(); //关闭读取流
}
3、缓冲区
缓冲区的出现是为了提高流的操作效率而出现的 所以在创建缓冲区之前,必须要先有流对象。
(1)该缓冲区中提共了一个跨平台的换行符newLine()
(2)为了提高字符写入流效率,加入了缓冲技术。
只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw=newBufferedWriter(fw);
(3)记住 只要用到缓冲区,就要记得刷新。bufw.flush();
(4)其实关闭缓冲区,就是关闭缓冲区中的流对象bufw.close();
(5)字符读取缓冲区
该缓冲区提供了一个一次读一行的方法readline,方便于对文本数据的获取。当返回空时,表示读到文件末尾
readline方法返回的时候只返回回车符之前的数据内容,并不返回回车符。
(6)为了提高效率,加入缓冲技术,将字符读取对象作为参数传递给缓冲对象作为构造函数。
BufferedReader bufr=new BufferedReader(fr);
public static void main(String[] args) throws IOException
{ //创建一个读取流对象和文件想关联
FileReader fr=new FileReader("buf.txt");
//为了提高效率,加入缓冲技术,将字符读取对象作为参数传递给缓冲对象作为构造函数
BufferedReader bufr=new BufferedReader(fr);
String line=null;
while((line=bufr.readLine())!=null)
{
System.out.println(line);
}
bufr.close();//关闭读缓冲流
}public static void main(String[] args) throws IOException
{
//创建一个字符写入流对象
FileWriter fw=new FileWriter("buf.txt");
//为了提高字符写入流效率,加入了缓冲技术。
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw=new BufferedWriter(fw);
for(int x=1;x<5;x++)
{
bufw.write("abc"+x);
bufw.newLine();
bufw.flush();
}
// 记住 只要用到缓冲区,就要记得刷新。bufw.flush();
//其实关闭缓冲区,就是关闭缓冲区中的流对象
bufw.close();
}
4、readline方法原理
无论是读一行,获取读取多个字符。其实最终都是在硬盘上一个一个读取。所以最终使用的还是read方法一次读一个的方法。
5、将C盘一个文本文件复制到D盘
复制的原理:
其实就是将c盘下的文件数据存储到D盘的一个文件中
步骤:
1、在D盘创建一个文件,用于存储c盘文件中的数据
2、定义读取流和C盘文件关联
3、通过不断的读取写完数据存储
4、关闭资源。
public static void copy_2()
{
FileWriter fw=null; //定义写入流对象
FileReader fr=null; //定义读取流对象
try
{
fw=new FileWriter("SystemDemo_copy.txt"); //创建写入对象流
fr=new FileReader("SystemDemo.java"); //创建读取对象流
char [] buf=new char[1024];
int len=0;
while((len=fr.read(buf))!=-1) //循环读取
{
fw.write(buf,0,len);
}
}
catch(IOException e)
{
throw new RuntimeException("读写失败");
}
finally{
if(fr!=null)
try{
fr.close();
}
catch(IOException e)
{ }
if(fw!=null)
try{
fw.close();
}
catch(IOException e)
{}
}
}
6、演示已有数据的续写
传递一个true参数,代表不覆盖已有的文件,并在已有的文件末尾处进行数据续写
FileWriter fw=new FileWriter("demo.txt",true);
fw.write("\r\n你好");
fw.close();
7、一些常用方法
double d=Math.ceil(16.34);//ceil返回大于指定数据的最小整数
double d1=Math.floor(16.34);//floor返回小于指定数据的最大整数
long l=Math.round(12.34);//四舍五入