I/O 流
File对象--内存中 映射关系 通过file对象操作硬盘中的文件或文件夹
文件夹的遍历 文件夹的删除-->递归;
操作文件中的内容
文件流(低级流):字节型:FileInputStream FileOutputStream
字符型:FileReader FileWriter
缓冲流(包装流) 将低级流包装起来
在流管道内增加缓冲的数据
让我们使用流读取的文字更加的流畅
高级流-->创建通过低级流
缓存流 :字节型:BufferedInputStream BufferedOutputStream
字符型:BufferedReader BufferedWriter
BufferedInputStream 构建方式 使用低级流构建作为参数
基本使用与低级流的方法完全一致
read() skip() available() close()
BufferedOutputStream 构建方式 使用低级流构建;没有boolean类型的参数
基本使用与低级流的方法完全一致
write() flush() close()
BufferedReader
String value=readLine();
BufferedWriter
write(String);
newLine();
打印流 InputStreamReader PrintWriter
字符串流 StringReader StringWriter
*对象流 对象的序列化/反序列化
1.为什么要有文件?
文件永久性的保存信息 将很多的数据直接存入文件--数据持久化
2.如果按照以行为单位新信息
好处在于每一行记录的信息都是相关的
信息我们可以读取处理 直接看懂文件
不好在于第一不安全 直接看懂
不好在于只能记录String信息 不能记录一些动作(方法)
3.读取处理的信息String -->Person
4.如果能将对象拆分成字节码 直接写入文件
将对象直接存入文件中--对象流
对象的序列化:将一个完整的对象 拆分成字节碎片 记录在文件中
对象的反序列化:将文件中记录的对象随便 反过来组合成一个完整的对象
如果想要将对象序列化到文件中
需要让对象所属的类实现Serializable接口
是一个示意性接口
同时为了让对象可以反序列化,需要让对象中多存在一个属性
private static longserialVersionUID=任意L;
如果想要将对象反序列化
需要给对象提供一个序列化的版本号
BufferedInputStream,BufferedOutputStream
import java.io.*;
public class TestMain{
public static void main(String[] args){
try{
File f=new File("D:\\ddd\\a.txt");
FileInputStream fi=new FileInputStream(f);
BufferedInputStream bi=new BufferedInputStream(fi);//缓冲
bi.available();
FileOutputStream fo=new FileOutputStream(f);
BufferedOutputStream bo=new BufferedOutputStream(fo);
bo.available();
}catch(IOException e){
e.printStackTrace();
}
}
}
BufferedWriter
import java.io.*;
public class TestMain{
public static void main(String[] args){
try{
File f=new File("D:\\ddd\\a.txt");
FileReader fr=new FileReader(f);//字符输入流
BufferedReader br=new BufferedReader(fr);
String values=br.readLine();//读取文件中的一行信息
while(values!=null){
System.out.println(values);
values=br.readLine();
}
/*int code=br.read();
while(code!=-1){
System.out.print((char)code);
code=br.read();
}
*/
}catch(IOException e){
e.printStackTrace();
}
}
}
登录
import java.io.*;
public class TestMain{
public String login(String filename,String name,String password){
try{
FileReader fr=new FileReader(filename);
BufferedReader br=new BufferedReader(fr);
String np=br.readLine();
while(np!=null){
if(np.split("-")[0].equals(name)){
if(np.split("-")[1].equals(password)){
return "登录成功";
}
break;
}
np=br.readLine();
}
}catch(IOException e){
e.printStackTrace();
}
return "账号或密码错误";
}
public static void main(String[] args){
TestMain tm=new TestMain();
String rs=tm.login("D:\\ddd\\a.txt","xiaohua","12345");
System.out.println(rs);
}
}
BufferedWriter
import java.io.*;
public class TestMain{
public static void main(String[] args){
try{
BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\ddd\\a.txt",true));
bw.newLine();
bw.write("Java-666");
bw.flush();
}catch(IOException e){
e.printStackTrace();
}
}
}
import java.io.*;
public class TestMain implements Serializable{
private long serialVersionUID=6807772913284504510L;
private String name;
private int age;
public TestMain(){
}
public TestMain(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public static void main(String[] args){
/*
TestMain tm=new TestMain("xixi",30);
try{//将对象记录在文件中;
FileOutputStream fos=new FileOutputStream("D:\\ddd\\a.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);//对象输出流
oos.writeObject(tm);
oos.flush();
}catch(IOException e){
e.printStackTrace();
}
*/
try{//对象反序列化
FileInputStream fis=new FileInputStream("D:\\ddd\\a.txt");
ObjectInputStream ois=new ObjectInputStream(fis);//对象输入流
TestMain p=(TestMain)ois.readObject();
System.out.println(p.getName());
}catch(Exception e){
e.printStackTrace();
}
}
}
---------------------------------------------------------------------------------------
Properties类的使用;java.util;使用方式像是map集合 value=getProperty(key)方法
读取的信息是文件 文件的后缀名.properties 文件里面key=value
package test0607;
import java.util.*;
import java.io.*;
public class TestMain{
public static void main(String[] args){
try{
Properties p=new Properties();
p.load(new FileReader("test0607\\a.properties"));
/*
Enumeration en=p.propertyNames();
while(en.hasMoreElements()){
String key=(String)en.nextElement();
String value=p.getProperty(key);
System.out.println(value);
}
*/
String v=p.getProperty("name");
System.out.println(v);
}catch(Exception e){
e.printStackTrace();
}
}
}