JavaIO
FileWriter
构造方法:
FileWriter(String fileName) 需要传入一个文件路径
成员方法:
void write(String str) 向指定文件写入字符str
void write(String str,int index,int len); 写入一个字符串中的一部分数据
void write(int ch); 写入一个字符串数据,这里参数是int的好处是既可以写入一个char烈性的数据也可以写入char对应的int类型的值。如‘a’对应97
void write(char[] chs) 写入一个字符数组数据
void write(char[] chs,int index,int len) 写入一个字符数组的一部分数据
void flush() 清空缓冲区数据 使其全部写入到指定文件 因此一般在关闭流之前需要调用该方法
void close() 关闭流释放系统底层资源
FileWriter写入换行以及向文本末尾追加
写入换行:
\n可以实现换行,但是windows系统自带的记事本打开并没有换行,因为Windows识别换行不是\n,而是\r\n。
windows: \r\n
linux: \n
mac: \r
实现数据的追加写入:
FileWriter(String fileName,boolean append); FileWriter默认是覆盖原文的,若需要在原文的基础上在追加内容则可以使用FileWriter(fileName,true)方式创建输入流对象
FileReader
构造方法:
FileReader(String fileName)
成员方法:
int read() 读取单个字符
int read(char[] buf) 读取字符,并将字符读入数组buf中 返回的是读取字符的个数
代码实例:
public class FileReaderDemo {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("a.txt");
int ch;
while ((ch=fr.read())!=-1){ //一次读取一个字符
System.out.print((char)ch);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("-------------");
try {
FileReader fr=new FileReader("a.txt");
char[] chs=new char[10];
int len=0;
int i=0;
while((len=fr.read(chs))!=-1){ //一次读取
i++;
System.out.println("第"+i+"次读取"+len+"个字符");
System.out.print(new String(chs,0,len));
System.out.println();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
hello world!
第1次读取10个字符
hello worl
第2次读取4个字符
d!
缓冲流
- BufferedWriter: 将文本写入字符输出流,缓冲各个字符,从而提供单个字符,数组和字符串的高效写入。
- BufferedReader: 从字符输入流读取文本,缓冲各个字符,从而实现字符,数组和行的高效读取。
缓冲流复制文本文件两种方式
- 使用缓冲流不使用字符数组
- 使用缓冲流使用字符数组
代码实例:
public class BufferedStreamDemo {
public static void main(String[] args) {
BufferedReader br=null;
BufferedWriter bw=null;
try {
br = new BufferedReader(new FileReader("a.txt"));
bw = new BufferedWriter(new FileWriter("copy.txt"));
//不使用数组读写数据 一次读写一个字符
// int ch;
// while((ch=br.read())!=-1){
// bw.write(ch);
// }
//使用字符数组读写数据 一次读写一个字符数组
char[] chs=new char[1024];
int len;
while((len=br.read(chs))!=-1){
bw.write(chs,0,len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bw!=null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
缓冲流的特有方法
void newLine(); 写一个换行符,这个换行符由系统决定,不同的操作系统newLine()方法使用的换行符不同,我们不在需要知道系统的换行符是什么。
String readLine(); 一次读取一行数据,但是不读取换行符
public class BufferedStreamDemo2 {
public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
for(int i=0;i<3;i++){
bw.write("Hello World!");
//bw.write("\r\n"); 使用newLine方法我们不需要知道某个系统的换行符是什么
bw.newLine();
}
bw.flush();
bw.close();
BufferedReader br=new BufferedReader(new FileReader("a.txt"));
String line;
while((line= br.readLine())!=null){
System.out.println(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}