JAVA IO流_3
一. 随机流
RandomAccessFile
可以直接操作数据
特性:带有文件指针
//File f=new File("D"+File.separator+"rand.txt");
//RandomAccessFile rf=new RandomAccessFile(f, "rw");//四种模式
//method1(rf);
RandomAccessFile rand2=new RandomAccessFile(new File("D:\\char02.txt"), "rw");
int len=0;
byte[] by=new byte[1024];
while((len=rand2.read(by))!=-1){
System.out.println(new String(by,0,len));
rand2.write(by,0,len);
}
}
//
// public static void method1(RandomAccessFile rf) throws IOException {
// rf.seek(0);
// System.out.println(rf.readLine());
// rf.writeUTF("how are you");
// System.out.println(rf.getFilePointer());
// rf.writeInt(10);//4
// rf.writeBoolean(false); //1
// rf.writeChar('a');//2
// System.out.println(rf.getFilePointer());
// rf.seek(0); //绝对定位,改变文件指针
// System.out.println(rf.readInt());
// }
}
二.配置文件的使用
一些项目常用的固定的参数信息,通常我们会建一个文件进行存储* Properties 继承hashtable,实现map集合的。
存放的数据信息是键值对
properties 存放的键值对都是字符串的
Properties
Properties p=new Properties();
InputStream in=new FileInputStream("test.properties");
//解决中文乱码的问题
//InputStreamReader bin=new InputStreamReader(in);
p.load(in); //将流里面的配置信息加载进pro的列表
String name=p.getProperty("name");
String age=p.getProperty("age");
String gender=p.getProperty("gender");
System.out.println(name+"=="+age+"=="+gender);
//迭代器的方式
Iterator<String> it= p.stringPropertyNames().iterator();
while(it.hasNext()){
String key=it.next();
System.out.println(key+":"+p.getProperty(key));
}
//往配置文件里面写内容
FileOutputStream fou=new FileOutputStream("test.properties");
//解决中文乱码问题
OutputStreamWriter bo=new OutputStreamWriter(fou);
p.setProperty("id", "2017"); //添加键值对数据
//out 输出流 comments 注释
p.store(fou, "this is my new add");
bo.close();
}
三.与装饰者模式相关
1.包含要增强类的对象引用2.扩展需要增强的方法
public class Demo01 {
public static void main(String[] args) throws IOException {
//BufferedReader bReader=new BufferedReader(new FileReader(new File("D:\\message.txt")));
// String str=null;
int num=0;
// while((str=bReader.readLine())!=null){
// num++;
// //System.out.println(num+":"+str);
// }
//将bufferRead的readLine()扩展功能
File f=new File("D:\\message.txt");
FileReader fr=new FileReader(f);
BufferedReader br=new BufferedReader(fr);
//先添加行号
myBuffer my=new myBuffer(br);
//myBuffer mb=new myBuffer(br);
String str1=null;
while((str1=my.readLine())!=null){
System.out.println(str1);
}
}
//装饰者设计模式
/*1.包含要增强类的对象引用
*2.扩展需要增强的方法
*
*
*/
}
//提升功能的类
class myBuffer extends BufferedReader{
int num=0;
public BufferedReader br; //1.包含要增强类的对象引用
public myBuffer(BufferedReader in) {
super(in);
this.br=in;
}
public String readLine() {
String str=null;
try {
str=br.readLine();
if(str!=null){
num++;
return num+":"+str;
}
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}