FileWriter
/**
* FileWriter类的使用
* 该类是写入字符文件的快捷类
*/
public classFileWriterDemo {
public static voidmain(String[] args)throws Exception {
//第一步:创建字符流输出对象
FileWriter fw = new FileWriter("readme.txt");
//第二步:调用写入数据方法
fw.write("注意事项"+System.getProperty("line.separator"));
fw.write("1、上课不能玩手机"+System.getProperty("line.separator"));
fw.write("2、不能迟到早退"+System.getProperty("line.separator"));
//第三步:调用刷新缓冲区功能,该功能会将缓冲区的数据写入到文件,并且清空缓冲区中的内容
fw.flush();
//第四步:关闭流,释放资源
fw.close();
}
}
flush 方法和close方法的区别
flush只刷新缓冲区,不释放流资源,流对象还可以继续使用
close刷新并且释放流资源,流对象不可以继续使用
、如何实现数据换行
window:\r\n
linux:\n
mac:\r
通用解决方案:String line = System.getProperty(“line.separator”);//根据应的换行符
怎么实现追加数据
调用FileWriter(String fileName, true)构造方法创建对象 建
FileReder
tjava.io.FileReader;
public classFileReaderDemo {
public static voidmain(String[] args)throws Exception {
//第一步:创建字符流输入对象
FileReader fr = new FileReader("readme.txt");
//第二步:调用读取数据方法,并显示
/*
*方式1::一次读取一个字符,效率低 ,不推荐
*/
int ch = 0;
while((ch=fr.read()) != -1){
System.out.print((char)ch);
}
/*
* 方式2:一次读取一个字符数组,效率高推荐
*/
fr = newFileReader("readme.txt");//必须重新赋值,或者注释掉方式1中的代码,因为fr对象已经读取到末尾了,必须重新开始读取
char[] chs = new char[1024];
int len = 0;
while((len = fr.read(chs)) != -1){
System.out.println(newString(chs,0,len));
}
//第三步:关闭流,释放资源,该对象无法继续使用
fr.close();
}
缓冲区是提高效率用的,给谁提高呢?
BufferedWriter:是给字符输出流提高效率用的,那就意味着,缓冲区对象建立时,必须要先有流对象。明确要提高具体的流对象的效率。
FileWriter fw = new FileWriter(“bufdemo.txt”);
BufferedWriter bufw = new BufferedWriter(fw);//让缓冲区和指定流相关联。
BufferedReader:
FileReader fr = new FileReader(“bufdemo.txt”);
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null){ //readLine方法返回的时候是不带换行符的。
System.out.println(line);
}
转换流
为什么要用转换流?
因为从控制台获取数据时获取到的是字节流,但是我们输入的是字符,所以操作字符流会更加方便,这时就需要转换流
转换流就是字符流和字节流之间的一个桥梁,别人给你一个字节流,明知道里面存的是文本,用字符流操作更方便,所以就要用转换流
/*输入转换流演示*/
//System.in 是个输入流,可以看成FileInputStream
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
System.out.println(line);
reader.close();
/*输出转换流演示*/
//System.out 是个字节输出流,这里看成 new FileOutputStream();就可以了
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
writer.write("你好");
writer.flush();
writer.close();
转换流编码问题
读取转换流和写入转换流都有带参的构造,可以指定编码,可以设置以何种编码读取字节或写入字节
InputStreamReader(InputStream in, String charsetName)
OutputStreamWriter(OutputStream, out, String charsetName)
/*输入转换流演示*/
//System.in 是个输入流,可以看成FileInputStream
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in,"UTF-8"));
String line = reader.readLine();
System.out.println(line);
reader.close();
/*输出转换流演示*/
//System.out 是个字节输出流,这里看成 new FileOutputStream();就可以了
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out,"UTF-8"));
writer.write("你好");
writer.flush();
writer.close();