关于IO流,今天最后总结一次,有些小tip。IO流重点掌握FileWriter,FileRead,BufferedWriter,BufferedRead.
1.FileWriter 文件输出流
构造函数 FileWriter fw = newFileWriter("test.txt");
-这个构造函数中,参数是一个文件名字符串。如果没有该文件,fw会自动创建一个文件。
- FileWriter会报出异常,把它抛掉
-文件路径中:
相对路径:指的是没有带盘符的路径。这样的路径根目录是当前的工程项目。FileWriterfw = new FileWriter("a.txt");a.txt会被创建在工程目录下一级目录里面
绝对路径:"d:\\File\\a.txt"。在工程目录外面。不建议使用中文路径名字
-追加文件的FileWriter:构造函数
FileWriterfw = new FileWriter(String fileName,boolean append);
第二个参数append表示,是否追加内容进去,true 表示追加内容,false表示覆盖原来的内容
eg:FileWriter fw = new FileWriter("a.txt",true); 表示每次写入都在文件后面插入,而不是重新覆盖
-FileWriter 写入文件的步骤
//1.创建对象 FileWriter fw = newFileWriter("a.txt",true);
//2.写入数据 fw.write("hello java");
//3.刷新缓冲区 fw.flush();
//4.关闭输出流 fw.close();
-这里注意一点,fw.flush()如果没有刷新缓冲区,内容就不会写到文件中去。运行的时候,文件中不会显示内容的。
- fw.close()作用是:冲刷缓冲区,再关闭资源。如果写了fw.close() 可以省略fw.flush()
-fw.write();
char[]chs = {'大','家','好'};
fw.write("abcde");//写入一个字符串
fw.write('没');//写入一个字符
fw.write(chs);//写入一个字符数组
fw.write("Hello my name is Simons",5,10);//写入字符串的一部分,5是开始的索引位置,10是长度
fw.close();
重点掌握是fw.write(String str)
2.FileReader 文件输入流
构造函数: FileReader fr = new FileReader("a.txt");
-FileReader中的文件名,要正确存在。没有目标源文件,运行的时候会报错
-intlen = fr.read 返回的是一个int类型的数值,不是字符或者字符串,当它读到末尾的时候,会返回-1;
下面一个程序:
intch;
while((ch = fr.read())!=-1)
{
System.out.print((char)ch);
}
这里说明了ch 接收到的是一个int类型的数值,当要输出字符时候,要进行转换
-FileReader重点掌握 read()两个方法
-read()读取一个字符
-while((ch= fr.read())!=-1)
-read(char[]chs):
char[]chs = new char[1024]
intlen;
while((len = fr.read(chs))!=-1) 读取一个字符数组 返回长度
publicstatic void main(String[] args) throws IOException {
//一次读取一个字符数组
char[] chs = new char[10];
FileReader fr = new FileReader("d.txt");
int len =0;
//System.out.println(len);
while((len = fr.read(chs))!=-1)
{
System.out.print(chs);
}
}
}
3.字符缓冲输出流 BufferedWriter
-创建字符缓冲输出流
FileWriter fw = new FileWriter("a.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("hshhshshhshs");
bw.newLine();//输入一个换行符号
bw.flush();//输出流都要刷新内存缓冲区,这样内容才能进入文本中
bw.close();//关闭!!!!记得要写关闭。
4.字符缓冲输入流 BufferedReader
-创建字符缓冲输入流:
FileReader fr = new FileReader("b.txt");
BufferedReader bw = new BufferedReader(fr);
//读取一行字符串
String line;
while((line = bw.read())!=null) //遍历读取每一行bw.read()总是返回字符串
{
}
==========案例=======================
一,文件和集合混合
/*把集合数据写入到文本中
* 定义一个集合,存储三个字符串
然后将三个字符串存储到当前工程下的array.txt中
要求在array.txt中每行只有一个字符串
*/
public class Test1 {
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<>();
String[] strs ={"Hello","World","Java"};
for(String s:strs)
{
list.add(s);
}
FileWriter fw = new FileWriter("array.txt");
BufferedWriter bw = new BufferedWriter(fw);
for(String s2:list)
{
bw.write(s2);
bw.newLine();
}
bw.close();
}
}
二 拷贝文件
//缓冲流的使用
/*
* BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
* BufferedReader 从字符输入流中读取文本,缓冲各个字,从而实现字符、数组和行的高效读取
*
*/
public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
//创建输出缓冲流对象
FileWriter fw = newFileWriter("buffwriter.txt",true);
FileReader fr = new FileReader("dd.txt");
BufferedWriter bw = new BufferedWriter(fw);
BufferedReader br = new BufferedReader(fr);
//一次读写一个数组
char[] chs = new char[1024];
int len;
while((len = br.read(chs))!=-1)
{
bw.write(chs);
}
bw.close();
}
}