IO流的使用

IO流的使用目录


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


一、file是什么?

File 类 就是当前系统中 文件或者文件夹的抽象表示  
通俗的讲  就是 使用File对象 来操作我们电脑系统中的文件或者文件夹

学习File类 其实就是学习 如果通过file对象 对系统中的文件/文件夹进行增删改查

二、File使用步骤

1.1创建File对象

代码如下(示例):创建一个File对象 并指定文件得路径  \转移字符串

File file01 = new File("D:\\AAA\\aaa.txt");

1.2添加数据

代码如下(示例):

 public static void main(String[] args) throws IOException {
            File file01 = new File("D:\\AAA\\aaa.txt");
            file01.createNewFile();
            File file02 = new File("D:\\AAA\\bbb");
            file02.mkdir();
            File file03 = new File("D:\\AAA\\ccc\\ddd");
            file03.mkdirs();
}
createNewFile();创建File对象
mkdir();  创建目录 make directory 单层目录
.mkdirs();  创建多层目录

 1.3查询数据

代码如下(示例):

public class Java003File_chaxun {
        public static void main(String[] args) throws IOException {
            File file= new File("D:\\AAA\\ccc\\ddd");
            String name = file.getName();
            System.out.println("name:"+name);
            String parent = file.getParent();
            System.out.println("父级"+parent);
            String path = file.getPath();
            System.out.println("文件路径"+path);
            File file1= new File("D:\\AAA");
            String[] strings = file.list();
            System.out.println(Arrays.toString(strings));
            File[] files = file1.listFiles();
            for(File f:files){
                System.out.println(f.toString());
            }

getName(); //得到文件得名称
getParent(); //得到父级路径得名称
getPath(); //得到文件得路径名称
isFile(); //判断该文件对象是否为文件类型
isDirectory(); //判断该文件对象是否为目录类型
 String[] list = file2.list(); //列出目录下所有子文件得名称
 File[] files = file2.listFiles(); //列出AAA目录下所有文件对象

  1.4删除数据

代码如下(示例):

 public static void main(String[] args) throws IOException {
        File file01 = new File("D:\\AAA\\aaa.txt");
        file01.createNewFile();
        File file02 = new File("D:\\AAA\\bbb");
        file02.mkdir();
        File file03 = new File("D:\\AAA\\ccc\\ddd");
        file03.mkdirs();


        file01.delete();
        file02.deleteOnExit();
        file03.delete();

delete();//删除文件
deleteOnExit(); // 当程序退出后 删除

  1.5修改数据

代码如下(示例):

  public static void main(String[] args) throws IOException {
            File file01 = new File("D:\\AAA\\aaa.txt");
            file01.createNewFile();
            File file02 = new File("D:\\AAA\\bbb");
            file02.mkdir();
            File file03 = new File("D:\\AAA\\ccc\\ddd");
            file03.mkdirs();



            file01.setWritable(false);
            file01.setReadOnly();

setReadable(false);//设置该文件得权限为不能读
setWritable(false);//设置该文件不能写
setReadOnly();//设置只读得权限
renameTo(new File("D:/AAA/d.txt"));//重命名

三、IO流使用步骤

1.1Writer字符输出流

字符输出流 ---指定对哪个文件(路径)进行写操作

   public static void main(String[] args) throws IOException {
       Writer writer = new FileWriter("D:\\AAA\\b.txt");
        String string="123456";
        writer.write(string);
        writer.flush();
        writer.close();
    }

        writer.flush//刷新流
        writer.close(); //关闭流资源

上面每次往文件中写内容时 就会把原来的内容覆盖了。 追加内容,在文件地址后加(,true)

 Writer writer = new FileWriter("D:\\AAA\\b.txt",true);

1.2 Reader字符输入流

 作用:就是读取b.txt里的内容

public static void main(String[] args) throws Exception{
        Reader reader = new FileReader("D:\\AAA\\b.txt");
        int a=0;
        char[] chars=new char[10];
        while( (a=reader.read(chars)) !=-1 ){
            String str=new String(chars,0,a);
            System.out.print(str);
        }

    }

字节输出流--OutputStream

它可以对任意文件进行操作,对文件进行输出操作。以字节为单位。 它是所有字节输出流的父类,

字节输入流---InputStream

它可以对任意文件进行读操作 ,以字节为单位,它是所有字节输入流的父类

缓存流

缓存流是在基础流[InputStream OutputStream Reader Writer]之上 添加了一个缓存池功能


BufferInutStream  BufferOutputStream BufferReader  BufferWriter 提高IO的效率,降低IO的次数。

@Test
    public void TestBuffer() throws Exception{
          OutputStream out=new FileOutputStream("D:/AAA/g.txt");
          BufferedOutputStream  bos=new BufferedOutputStream(out);//缓存流要作用再基础流上
          String str="abcdefhijglmn";
          byte[] bytes = str.getBytes();
          bos.write(bytes);  //因为你写的内容 暂时放入缓存池中  并没有直接放入文件中。 所以文件中没有你的内容。
          //bos.flush();//刷新缓存池---把池子中的内容输入到文件上
            bos.close(); //关闭----先刷新缓冲池 再关闭流资源
    }

理解对象流及序列化机制


1.对象流作用


用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到文件源中(序列化),也能把对象从文件源中还原回来(反序列化)

2.序列化机制理解


首先我们要了解什么是序列化机制?
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。
当其它程序获取了这种二进制流,就可以恢复成原来的Java对象

序列化:用ObjectOutputStream类保存基本类型数据或对象的机制
反序列化:用ObjectInputStream类读取基本类型数据或对象的机制

注意:ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
用来表明类的不同版本间的兼容性。
简言之,其目的是以序列化对象进行版本控制,有关各版本反序列化时是否兼容。
如果类没有显示定义这个静态常量,它的值是Java运行时环境根据类的内部细节自
动生成的。若类的实例变量做了修改,serialVersionUID 可能发生变化。故建议,
显式声明。



3.序列化机制的好处


可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可被还原

4.序列化注意事项


首先,如果需要让某个对象支持序列化机制,则必须让对象所属的类及其属性是可
序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一。

Serializable(主要实现这个接口)
Externalizable
否则,会抛出NotSerializableException异常

凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量:


二、操作步骤
1.使用对象流序列化操作
1. 创建节点输出流(FileOutputStream)
2. 创建对象流(ObjectOutputStream)
3. 调用 ObjectOutputStream 对象的 writeObject(对象) 方法输出可序列化对象
4. 注意写出一次,操作flush()一次
5. 关闭流

 

  @Test //存档:----序列化:
    public void testObjectStream() throws Exception{
        OutputStream out=new FileOutputStream("D:/AAA/a.txt");
        //对象输出流
        ObjectOutputStream oos=new ObjectOutputStream(out);

        //使用对象输出流调用输出方法 输出的类对象 该类必须实现Serializable 序列化接口
        Role r=new Role("吕布","7级",1,"弑父");
        oos.writeObject(r);
        oos.close();
    }
    //测试 读档: ----反序列化:
    @Test
    public void testObjectStream2()throws Exception{
        InputStream input=new FileInputStream("D:/AAA/a.txt");
        ObjectInputStream ois=new ObjectInputStream(input);
        Object o = ois.readObject();

        System.out.println(o);
        ois.close();
    }


总结

以上就是今天要讲的内容,本文仅仅简单介绍了IO流的使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值