java伪装反序列化字节流_Java基础之IO流(字节流、字符流、内存流、带缓存的流、序列化和反序列化)...

File类:File类提供了对文件的操作,可以通过字符串或URI来构建一个File类对象。通过对象,可以实现文件的创建(createNewFile)、删除(delete)、获得文件名(getName)、获得父目录对象(getParentFile)、获得父目录名称(getParent)、获得完整路径(getPath)等。File类提供了静态方法listRoots,返回所有的盘符(也是File对象),getTotalSpace方法会返回该目录所剩余的容量空间。

f.list方法会返回f下所有的File对象的名称(也就是f目录下所有的文件以及文件夹的名称)。这个方法可以传递一个FileNameFilter(接口)的实例对象。这样会根据要求列出符合条件的文件名。

f.listFiles方法返回f下的所有File对象。也可以传递一个实现FileFilter接口的实例对象作为参数。这样会根据要求列出符合条件的File对象。

public class Maintest {

public static void main(String[] args) {

File file=new File("e:\\aaa");

String[] fileName=file.list(new FilenameFilter() {//匿名内部类

@Override public boolean accept(File dir, String name) {

return name.endsWith(".txt")?true:false;//将以.txt结尾的罗列出来

}

});

for (String f:fileName) {

System.out.println(f);

}

File[] f=file.listFiles(new FileFilter() {

@Override public boolean accept(File pathname) {

return pathname.isDirectory()?true:false;//将文件夹罗列出来

}

});

for(File fi:f)

{

System.out.println(fi.getName());

}

}

}

运行结果:

123.txt

456.txt

999.txt

aaa.txt

abc.txt

ccc.txt

dataoutputstream.txt

object.txt

bbb

新建文件夹

2.字节流:InputStream和OutputStream是字节流的父类,是抽象的,不能创建对象。

(1).FileInputStream和FileOutputStream实现了这两个类。按字节读写。可以通过字符串或File对象来构建这两个流。输出流output提供的时write方法,输入流input提供了read方法,该方法返回读到的字节数。没读到返回-1。

(2).FilterOutputStream和FilterInputStream继承了OutputStream和InputStream类,没有新增任何方法,只是扩展了父类。这两个类的内部含有一个父类的引用。

(3).DataInputStream和DataOutStream分别继承了以上两个类。实现了DataInput和DataOutput这两个接口。这两个类可以读写基本数据类型。

(4).BufferedInputStream和BufferedOutputStream也是FilterInputStream和FileterOutputStream的子类。没有增加方法,但是带了缓存,性能高,支持流标记。

(5).PrintStream类可以方便输出,也是继承FilterOutputStream类,可以直接用字符串来构建。提供print(ln)方法,直接将内容打印到文件中。

(6).内存流:ByteArrayInputStream和ByteArrayOutputStream可以将字节读写到内存中。

3.字符流:Reader和Writer是字符流的基类,其实是以字节流为基础的。Reader完成了从字节到字符的解码过程,Writer完成了从字符到字节的编码过程。

(1).OutputStreamWriter和InputStreamReader继承了字符流的基类。构建字符流的时候要用到字节流。

(2).带缓存的字符流: BufferedWriter和BufferedReader,构建时要用到Writer和Reader。新增了newLine(换一行)和readLine(读一行)的方法。

FileOutputStream fo=new FileOutputStream("e:\\aaa.txt");

Writer writer=new OutputStreamWriter (fo);

BufferedWriter bw=new BufferedWriter(writer);

也可以通过FileReader和FileWriter来构建

FileReader fr=new FileReader("e:\\aaa.txt");

BufferedReader br=new BufferedReader(fr);

(3).PrintWriter和PrintStream相类似,为了方便输出。但PrintStream是字节流,PrintWriter是字符流。

4.序列化与反序列化:实现Serializable接口(表示接口,空的)的类支持序列化。transient修饰的成员不参与序列化。序列化过程:

public class Maintest {

public static void main(String[] args) throws Exception{

//序列化过程

OutputStream f=new FileOutputStream("e:\\aaa\\abcd.txt");

ObjectOutputStream objectOutputStream=new ObjectOutputStream(f);

objectOutputStream.writeObject(new Student("zhangsan",20));

System.out.println("OK");

//反序列化过程

InputStream fi=new FileInputStream("e:\\aaa\\abcd.txt");

ObjectInputStream objectInputStream=new ObjectInputStream(fi);

System.out.println((Student)objectInputStream.readObject());

}

}

运行结果:

OK

Student{name='zhangsan', age=20}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值