java.io.FileWriter
类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
构造方法
FileWriter(File file)
:
创建一个新的
FileWriter
,给定要读取的
File
对象。
FileWriter(String fileName)
:
创建一个新的
FileWriter
,给定要读取的文件的名称。
当你创建一个流对象时,必须传入一个文件路径,类似于
FileOutputStream
。
构造举例,代码如下
public class
FileWriterConstructor
{
public static
void
main
(
String
[]
args
)
throws
IOException
{
//
使用
File
对象创建流对象
File file
=
new
File
(
“a.txt”
);
FileWriter fw
=
new
FileWriter
(
file
);
//
使用文件名称创建流对象
FileWriter fw
=
new
FileWriter
(
“b.txt”
);
}
}
基本写出数据
写出字符
:
write(int b)
方法,每次可以写出一个字符数据,代码使用演示:
public class
FWWrite
{
public static
void
main
(
String
[]
args
)
throws
IOException
{
//
使用文件名称创建流对象
FileWriter fw
=
new
FileWriter
(
“fw.txt”
);
//
写出数据
fw
.
write
(
97
);
//
写出第
1
个字符
fw
.
write
(
‘b’
);
//
写出第
2
个字符
fw
.
write
(
‘C’
);
//
写出第
3
个字符
fw
.
write
(
30000
);
//
写出第
4
个字符,中文编码表中
30000
对应一个汉字。
/*
【注意】关闭资源时
,
与
FileOutputStream
不同。
如果不关闭
,
数据只是保存到缓冲区,并未保存到文件。
*/
// fw.close();
}
}
输出结果:
abC
田
1.
虽然参数为
int
类型四个字节,但是只会保留一个字符的信息写出。
2.
未调用
close
方法,数据只是保存到了缓冲区,并未写出到文件中。
关闭和刷新
因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据
的。如果我们既想写出数据,又想继续使用流,就需要
flush
方法了。
flush
:刷新缓冲区,流对象可以继续使用。
close
:
先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
代码使用演示:
public class
FWWrite
{
public static
void
main
(
String
[]
args
)
throws
IOException
{
//
使用文件名称创建流对象
FileWriter fw
=
new
FileWriter
(
“fw.txt”
);
//
写出数据,通过
flush
fw
.
write
(
‘
刷
‘
);
//
写出第
1
个字符
fw
.
flush
();
fw
.
write
(
‘
新
‘
);
//
继续写出第
2
个字符,写出成功
fw
.
flush
();
//
写出数据,通过
close
fw
.
write
(
‘
关
‘
);
//
写出第
1
个字符
fw
.
close
();
fw
.
write
(
‘
闭
‘
);
//
继续写出第
2
个字符
,
【报错】
java.io.IOException: Stream closed
fw
.
close
();
}
}
即便是
flflush
方法写出了数据,操作的最后还是要调用
close
方法,释放系统资源。
写出其他数据
1.
写出字符数组
:
write(char[] cbuf)
和
write(char[] cbuf, int off, int len)
,每次可以写出字符数
组中的数据,用法类似
FileOutputStream
,代码使用演示:
public class
FWWrite
{
public static
void
main
(
String
[]
args
)
throws
IOException
{
//
使用文件名称创建流对象
FileWriter fw
=
new
FileWriter
(
“fw.txt”
);
//
字符串转换为字节数组
char
[]
chars
=
”
黑马程序员
”
.
toCharArray
();
//
写出字符数组
fw
.
write
(
chars
);
//
黑马程序员
//
写出从索引
2
开始,
2
个字节。索引
2
是
‘
程
‘
,两个字节,也就是
‘
程序
‘
。
fw
.
write
(
b
,
2
,
2
);
//
程序
//
关闭资源
fos
.
close
();
}
}
2.
写出字符串
:
write(String str)
和
write(String str, int off, int len)
,每次可以写出字符串中的
数据,更为方便,代码使用演示:
public class
FWWrite
{
public static
void
main
(
String
[]
args
)
throws
IOException
{
//
使用文件名称创建流对象
FileWriter fw
=
new
FileWriter
(
“fw.txt”
);
//
字符串
String
msg
=
”
黑马程序员
”
;
//
写出字符数组
fw
.
write
(
msg
);
//
黑马程序员
//
写出从索引
2
开始,
2
个字节。索引
2
是
‘
程
‘
,两个字节,也就是
‘
程序
‘
。
fw
.
write
(
msg
,
2
,
2
);
//
程序
//
关闭资源
fos
.
close
();
}
}
3.
续写和换行
:操作类似于
FileOutputStream
。
public class
FWWrite
{
public static
void
main
(
String
[]
args
)
throws
IOException
{
//
使用文件名称创建流对象,可以续写数据
FileWriter fw
=
new
FileWriter
(
“fw.txt”
,
true
);
//
写出字符串
fw
.
write
(
”
黑马
”
);
//
写出换行
fw
.
write
(
“\r\n”
);
//
写出字符串
fw
.
write
(
”
程序员
”
);
//
关闭资源
fw
.
close
();
}
}
输出结果
:
黑马
程序员
字符流,只能操作文本文件,不能操作图片,视频等非文本文件。
当我们单纯读或者写文本文件时 使用字符流 其他情况使用字节流
版权声明:本文为qq_320922199原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。