6,PIO操作xls文件
public class TestPOI {
public static void main(String[] args) {
//创建一个(xls)文件
HSSFWorkbook book = new HSSFWorkbook();
//创建一个工作簿
HSSFSheet sheet = book.createSheet();
//设置默认的每行的高度
sheet.setDefaultRowHeight((short)400);
//设置工作簿名字
book.setSheetName(0, "学生的信息");
//创建行,编号从0开始
HSSFRow row0 = sheet.createRow(0);
//创建单元格,编号从0开始
HSSFCell cell0 = row0.createCell(0);
//为指定的单元格赋值
cell0.setCellValue("德美");
//创建保存路径和名字
File file = new File("e:"+File.separator+"student.xls");
//创建输出字节流
FileOutputStream os = null;
try {
os = new FileOutputStream(file);
book.write(os);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//关闭资源
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
7,对象的持久化
* 对象的持久化:就是把一个对象保存到磁盘中,在下次要用到该数据时就可以直接从磁盘中读取对象
*也可以方便在网络中传输
*ObjectInputStream():对象的输入流
*ObjectOutputStream() :对象的输出流
public class ObjectStreamDemo01 {
//创建一个保存对象的文件
File file = new File("e:"+File.separator+"person.txt");
//输出对象的流
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(file));
//创建person对象
Person01 p1 = new Person01("王五",15);
Person01 p2 = new Person01("王六",16);
Person01 p3 = new Person01("王七",17);
Person01 p4 = new Person01("王八",18);
Person01 p5 = new Person01("王九",19);
Person01 p6 = new Person01("王十",19);
//把对象输出到指定的文件中去
oos.writeObject(p1);
oos.writeObject(p2);
oos.writeObject(p3);
oos.writeObject(p4);
oos.writeObject(p5);
oos.writeObject(p6);
oos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//关闭资源
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//读取持久化的对象
public void TestReadObject(){
//创建一个获取对象的流
ObjectInputStream ois = null;
File file = new File("e:"+File.separator+"person.txt");
try {
ois = new ObjectInputStream(new FileInputStream(file));
//读取指定的对象文件
Person01 p1 = (Person01)ois.readObject();
Person01 p2 = (Person01)ois.readObject();
Person01 p3 = (Person01)ois.readObject();
Person01 p4 = (Person01)ois.readObject();
Person01 p5 = (Person01)ois.readObject();
Person01 p6 = (Person01)ois.readObject();
System.out.println(p1.toString());
System.out.println(p2.toString());
System.out.println(p3.toString());
System.out.println(p4.toString());
System.out.println(p5.toString());
System.out.println(p6.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ObjectStreamDemo01 p = new ObjectStreamDemo01();
p.TestObject();
p.TestReadObject();
}
}
class Person01 implements Serializable{
/**
* 版本编号
*/
private static final long serialVersionUID = 1L;
/*
* transient修饰的属性会在持久化的时候忽略.彻底加密
*/
//序列化时:姓名是: null年龄是:15
private String name;
private int age;
//控制对象持久化的方法
private void writeObject(ObjectOutputStream oos) throws IOException{
/*
* 写入和获取的顺序要一致,要不然会报错
*/
//把年龄加12,姓名翻转
this.age +=12;
oos.writeInt(age);
oos.writeObject(new StringBuffer(name).reverse().toString());
}
private void readObject(ObjectInputStream ois)throws IOException{
/*
* 获取对象的属性时要按照添加的顺序获取,否则报错
*/
try {
//获取年龄
//this.age = ois.readInt();
//获取名字
//this.name = (String)ois.readObject();
//获取真实的年龄
this.age = ois.readInt()-12;
//获取真实的姓名
this.name = new StringBuffer((String)ois.readObject()).reverse().toString();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Person01(){}
public Person01(String name,int age){
this.name = name;
this.age = age;
}
public void prinrName(){
System.out.println(name);
}
public void prinrAge(){
System.out.println(age);
}
@Override
public String toString() {
return "姓名是: "+name+"\t年龄是:"+age;
}
}
8,拷贝文件往文件的指定位置添加RandomAccessFile
8-1RandomAccessFile
RandomAccessFile:随机流,可以控制文件的指针任意的在文件的任意位置进行读或写
public void RandomAccessFileDemo(){
RandomAccessFile raf = null;
File file = new File("e:"+File.separator+"abc.txt");
* 创建一个随机流.第二个参数是指定流的功能.
* r-只读
* w-只写
* rw-读写
try {
raf = new RandomAccessFile(file, "rw");
raf.write(1);//1字节
raf.writeByte(2);//1字节
raf.writeDouble(12.3);//8字节
raf.writeFloat(2.3f);//4字节
raf.writeBytes("abc");
//获取第一个位置的值
System.out.println(raf.read());//1
//把指针移到指定的位置才能正确获取数据
raf.seek(2); //12.3跳过后可以读到
System.out.println(raf.readDouble());//7.72107656860083E-298读不到因为中间隔了一个byte
raf.seek(4);
System.out.println(raf.readChar());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//关闭资源
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
8-2, 往指定的文件的指定位置添加数据
File file = new File("e:"+File.separator+"abc.txt");
//操作临时文件的输入或者输出流
BufferedReader br = null;
BufferedWriter bw = null;
//操作指定文件的随机流
RandomAccessFile raf = null;
public void CopyFile(){
try {
//创建一个临时文件
File temp = File.createTempFile("temp",".txt");
//程序运行完毕后立即删除临时文件
temp.deleteOnExit();
//创建一个指向临时文件的输入输出缓冲流
br = new BufferedReader(new FileReader(temp));
bw = new BufferedWriter(new FileWriter(temp));
//创建指向文件的随机流
raf = new RandomAccessFile(file,"rw");
//定义要跳过的字节数
int index = 14;
//指针跳过指定的字节
raf.seek(index);
//从指定的字节处开始复制文件到临时文件
byte[] b = new byte[100];
int len = 0;
while((len = raf.read(b))!=-1){
bw.write(new String(b,0,len));
bw.flush();
}
//指定要添加的文本
String msg = "今天很冷";
//移动指针到需要添加的位置
raf.seek(index);
raf.write(msg.getBytes());
//读取临时文件中的数据,追加到当前文件尾
String str = null;
while((str = br.readLine())!=null){
//把临时文件中的数据添加到指定文件的末尾
raf.write(str.getBytes());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
br.close();
bw.close();
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}