关于java基础--PIO操作xls文件、持久化对象以及拷贝文件

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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值