字符输出流【Writer】
java.io.Writer:抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。
基本共性方法:
- abstract void close() :关闭此流,但要先刷新它。
- abstract void flush() :刷新该流的缓冲。
- void write(int c) : 写入单个字符。
- void write(char[] cbuf) :写入字符数组。
- abstract void write(char[] cbuf, int off, int len) :写入字符数组的某一部分
- void write(String str) :写入字符串。
- void write(String str, int off, int len) :写入字符串的某一部分。
FileWrite类
java.io.FileWriter:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。
构造方法:
- FileWriter(File file) : 根据给定的 File 对象构造一个 FileWriter 对象。
- FileWriter(String fileName) :根据给定的文件名构造一个 FileWriter 对象。
- FileWriter(File file, boolean append) : 根据给定的 File 对象构造一个 FileWriter 对象。
- FileWriter(String fileName, boolean append) :根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
字符输入流的使用步骤:
1.创建FileWriter对象,构造方法中绑定要写入的目的地
2.使用FileWriter对象中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
3.使用FileWriter对象中的方法flush,把内存缓冲区的数据,刷新到文件中
4.释放资源
代码如下:
void write(int c) : 写入单个字符。
public class Demo01Write {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//1.创建FileReader对象,构造方法中绑定要读入的数据源
FileWriter fw=new FileWriter("1.txt");
//2.使用FileWriter对象中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程)
fw.write(98);
//3.使用FileWriter对象中的方法flush,把内存缓冲区的数据,刷新到文件中
fw.flush();
//4.释放资源
fw.close();
}
}
截图如下:
代码如下
void write (char[] cbuf)写入字符数组
abstract void write(char[] cbuf,int off,in len)写入字符数组的某一部分
void write (String str) 写入字符串。
void write (String str,int off,int len) 写入字符串的某一部分
public class Demo02Writer {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileWriter fw=new FileWriter("2.txt");
//-void write (char[] cbuf)写入字符数组
char[] cbuf= {'a','c','e'};
fw.write(cbuf);
//void write(char[] cbuf,int off,in len)写入字符数组的某一部分
fw.write(cbuf, 1, 1);
//-void write (String str) 写入字符串。
fw.write("hello java");
//-void write (String str,int off,int len) 写入字符串的某一部分
fw.write( "努力努力在努力", 2, 2);
fw.flush();
fw.close();
}
}
运行截图:
代码如下:
续写和换行
续写,追加:使用两个参数的构造方法
FileOutputStream(String filename,boolean append)
FileOutputStream(File file,boolean append)
参数:
String filename,File file:写入数据的目的地
boolean append:追加开关
true:创建对象不会覆盖源文件,继续在后面追加写
false:创建一个新文件,覆盖源文件
写换行:写换行符号
windows:\r\n
linux:/n
mac:/r
public class Demo03Writer {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileWriter fw =new FileWriter("3.txt",true);
String str="努力学习";
for(int i=0;i<10;i++) {
fw.write(str+" "+i+"\r\n");
}
fw.flush();
fw.close();
}
}
截图如下:
代码如下:
flush方法和close方法的区别
- flush:刷新缓冲区,流对象可以继续使用。
- close:先刷新缓冲区,然后通知系统释放资源。流对象不可再使用了。
public class Demo03Writer {
/*
flush:刷新缓冲区,流对象可以继续使用。
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileWriter fw =new FileWriter("3.txt",true);
String str="努力学习";
for(int i=0;i<10;i++) {
fw.write(str+" "+i);
}
fw.flush();
String str1="java";
fw.write(str1);
fw.flush();
fw.close();
}
}
截图如下:
代码如下:
public class Demo03Writer {
/*
close:先刷新缓冲区,然后通知系统释放资源。流对象不可再使用了。如果在close后面继续使用流会报出异常:Exception in thread "main" java.io.IOException: Stream closed
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileWriter fw =new FileWriter("3.txt",true);
String str="努力学习";
for(int i=0;i<10;i++) {
fw.write(str+" "+i);
}
fw.flush();
fw.close();
String str1="java";
fw.write(str1);
}
}
截图如下: