字符流
字符流初步调用
FileReader reader = new FileReader("E:/a.txt");
System.out.println((char)reader.read());
System.out.println((char)reader.read());
基本的使用
FileReader reader = new FileReader("E:/a.txt");
FileWriter writer = new FileWriter("E:/c.txt");
char[] chars = new char[10];//通过指定长度进行输出
int size = 0;
while ((size=reader.read(chars))!=-1){
System.out.println(Arrays.toString(chars));
writer.write(chars,0,size);
}
reader.close();
writer.close();
}
储存和输出
FileReader fileReader = new FileReader("E:/a.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
//输出时,保留文件中已经存在内容,将新内容追加原有内容的后面
FileWriter writer = new FileWriter("E:/b.txt",true);
BufferedWriter bufferedWriter = new BufferedWriter(writer);
String line = null; //一次可以读入一行数据, 读完返回null
while ((line = bufferedReader.readLine())!=null){
bufferedWriter.write(line);//一次向外输出一个字符串
bufferedWriter.newLine();//插入一个换行符
}
bufferedReader.close();
bufferedWriter.flush();
bufferedWriter.close();
}
}
字节流
字节流基本的使用
//创建一个输入流对象
FileInputStream in = new FileInputStream("E:/a.txt");
FileOutputStream out = new FileOutputStream("E:/b.txt");//输出流会自动创建文件
System.out.println(in.read());//97 每read一次 返回一个字节编码
System.out.println(in.read());//98
System.out.println(in.read());//99
System.out.println(in.read());//100
System.out.println(in.read());//-1 当文件内容读完了以后,返回-1
通过字节流对文件的进行输出(输出为byte型)
//创建一个输入流对象
FileInputStream in = new FileInputStream("E:/baidu.png");
FileOutputStream out = new FileOutputStream("E:/baidu1.png");//输出流会自动创建文件
/*
int read() 默认一次读一个字节,返回的是读到的字节编码 效率低.
int read(byte[] b) 默认一次读一个指定大小的byte数组个字节, 返回的是数组中一次实际装入的字节个数
两个方法相同之处都是读完后返回-1;
*/
byte[] bytes = new byte[100];
int size = 0;
while ((size = in.read(bytes))!=-1){
out.write(bytes,0,size);
}
//关闭流对文件的占用
in.close();
out.close();
}
用处理流进包装
节点流和处理流的概念
● 节点流:
如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,
则称为节点流。
● 处理流:
如果流封装的是其它流对象,称为处理流。 处理流提供了缓冲功能,
提高读写效率,同时增加了一些新的方法
代码对字节流进行包装
//创建一个输入流对象
FileInputStream in = new FileInputStream("E:/baidu.png");//节点流,直接包含文件(数据)
BufferedInputStream bin = new BufferedInputStream(in);//处理流 -->带缓冲功能的流
FileOutputStream out = new FileOutputStream("E:/baidu1.png");
BufferedOutputStream bout = new BufferedOutputStream(out,2048);
byte[] bytes = new byte[2049];
int size = 0;
while ((size = bin.read(bytes))!=-1){
bout.write(bytes,0,size);
}
bin.close();
bout.flush();//刷新缓冲区
bout.close();
通过字节流用代码向文件输入指定字符串
//数据输入输出流
/* String s = "你好";
FileOutputStream out = new FileOutputStream("");
out.write(s.getBytes());//实际向外发送时,需要转为byte数组
FileInputStream in = new FileInputStream("");
byte [] bytes = new byte[100];
int size = in.read(bytes);//对方接收到之后,拿到的也是byte数组
String str = new String(bytes,0,size);*/
String s = "你好";
FileOutputStream out = new FileOutputStream("E:/msg.txt");
DataOutputStream dout= new DataOutputStream(out);
dout.writeUTF(s);//将字符串直接写出. 但是底层转为字节数组
FileInputStream in = new FileInputStream("E:/msg.txt");
DataInputStream din = new DataInputStream(in);
String str = din.readUTF();//直接可以读到一个字符串, 在底层将读到字节数组转为字符串
System.out.println(str);