一、字符流的写入 FileWriter
1. FileWriter是什么?
是抽象类Writer的子类,用于向指定文件写入字符流
2. FileWriter有什么用?
向指定文件写入字符
3. FileWriter怎么用?
FileWriter
A:构造方法(没有无参的构造方法,因为要明确写入的文件是什么,不然不知道写到哪里去了!)
FileWriter(File file)
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file, boolean append)
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(FileDescriptor fd)
构造与某个文件描述符相关联的 FileWriter 对象。
FileWriter(String fileName)
根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append)
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
File file = new File("pw.txt");
FileWriter fw = new FileWriter(file);
FileWriter fw = new FileWriter(new File("pw.txt"));
FileWriter fw = new FileWriter("pw.txt");
B:步骤
创建文件对象,指定写入的文件目录
调用write方法写入数据
关闭资源
FileWriter fw = new FileWriter("fw.txt");
fw.write("haha");
fw.flush();.一定要记得刷
fw.close();
标准代码事例:
import java.io.FileWriter;
import java.io.IOException;
public class Test4 {
public static void main(String[] args) {
FileWriter flr = null;
String s = "写入字符";
try {
flr = new FileWriter("fada.txt");
// 方式一:直接写入字符串
flr.write(s);
// 方式二:写入char型数组
char[] ch = s.toCharArray();
flr.write(ch);
// 方式三:写入数字,结果是其ASCII码值
flr.write(110);
flr.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (flr!=null) {
try {
flr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
4. FileWriter什么时候用?
当需要向文件中写入字符的时候
5. FileWriter有什么特点?
wrtie完后,一定要刷,flush 里面的fileName如果没有,会自已创建
fw.write(ch,0,i);为了防止写出空格,因为reader(ch)是每次读取的是一个数组,返回是当时写入的字符数目int 所以在writer时,要给定长度
这个可以写一次,刷一次,也可写多次刷一次,关健看每次写入的大小,如果大的话,就刷多几次
避免过份耗内存.
最后一定要close(),关闭以释放资源
如果追加数据,怎么办?FileWriter fw = new FileWriter("it.txt",true);
有true就不会覆盖,不加默认覆盖
如果让数据可以换行,怎么办?fw.write("\r\n");
window的换行是:\r\n
linux的换行是:\n
mac的换行是:\r
C:flush和close的区别?
flush只刷新数据
close先刷新数据,后关闭资源
D:流为什么一定要关闭?
流对象的关闭,其实做了两件事情.
第一:告诉jvm本身流对象是垃圾了,
第二:告诉系统可以释放创建流对象时候使用的资源。
二、字符流的读取 FileReader
1. FileReader是什么?
是io包下抽象类Reader的一个子类
2. FileReader有什么用?
用于从文件中读取字符
3. FileReader怎么用?
构造方法(也没有无参的构造方法,原因同FileWriter)
FileReader(File file)
在给定从中读取数据的 File 的情况下创建一个新 FileReader。
FileReader(FileDescriptor fd)
在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。
FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新 FileReader。
A:读取方式一
FileReader fr = new FileReader("it.txt");
int ch = 0;
while((ch=fr.read())!=-1)
{
System.out.print((char)ch);
}
fr.close();
B:读取方式二
FileReader fr = new FileReader("it.txt");
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs))!=-1)
{
System.out.print(new String(chs,0,len));
}
fr.close();
C.文件的复制
把某个地方的文件复制到另外一个地方去。
源文件:a.txt -- FileReader
目标文件:b.txt -- FileWriter
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
char[] chs = new char[1024];
int len = 0;
while((len=fr.read(chs))!=-1)
{
fw.write(chs,0,len);
fw.flush();
}
fw.close();
fr.close();
标准代码写法:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test5 {
public static void main(String[] args) {
// 获取文件
FileReader fr = null;
try {
fr = new FileReader("总结.txt");
int i = 0;
// 方法一:一个字符一个字符读
while ((i = fr.read()) != -1) {
System.out.print((char) i);
}
// 方式二:一次把字符写满到一个字符数组中,如果写完了,返回-1
char[] ch = new char[1024];
while ((i = fr.read(ch)) != -1) {
System.out.print(new String(ch, 0, i));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
4. FileReader什么时候用?
当需要对文件里的字符进行读取时
5. FileReader有什么特点?
不管读还是写,都要关闭流!
读取的时候有两种方式:一种是一个字符一个字符读,这个时候返回的是ASCII,所以要强转
二是字符数组的方式读,也就是一次一个char数组
那么我们定义数组长度就显得尤为重要了,不然容易乱码,所以一般定义为char[1024].也就是1KB
|
|