为了账号安全,请及时绑定邮箱和手机立即绑定

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • file.list()和file.listFiles()的使用

    public static void listDirectory(File dir) throws IOException{
      if(!dir.exists())
       throw new IllegalArgumentException("目录:"+dir+"不存在.");
      if(!dir.isDirectory())
       throw new IllegalArgumentException(dir+"不是目录.");
      
      //list()方法用于列出当前目录下的子目录和文件,不包含子目录下的内容
      /*String[] filenames = dir.list(); 
      for (String string : filenames) {
       System.out.println(dir+"\\"+string);
      }*/
      
      //如果要遍历子目录下的内容就需要构造成File对象做递归操作,File提供了直接返回File对象的API
      File[] files = dir.listFiles();//返回的是直接子目录(子文件)的抽象
      if(files!=null && files.length > 0){
       for (File file : files) {
        if(file.isDirectory()){
         //递归
         listDirectory(file);
        }else{
         System.out.println(file);
        }
       }
      }
     }


    查看全部
    0 采集 收起 来源:遍历目录

    2018-05-20

  • File file = new File();

    file.exist():返回是否文件是否存在

    file.mkdir():创建目录

    file.mkdirs():创建多层子目录

    file.delete():删除文件

    file.getName():返回文件名

    file.getAbsolutePath():返回文件路径

    file.isDirectory():返回是否是目录

    file.isFile():返回时否是文件

    file.createNewFile():创建新的文件。

    file.getParent():返回父目录

    查看全部
  • "gbk":中文占2个字节,英文占1个字节。
    "utf-8":中文占3个字节,英文占1个字节。
    java是双字节编码 utf-16be:中文占2个字节,英文占2个字节。
    不同编码的java项目的文本文件直接复制粘贴会乱码,复制内容则不会。

    查看全部
    0 采集 收起 来源:文件的编码

    2018-05-20

  • https://img1.sycdn.imooc.com//5afb94ed00018a2213660768.jpg

    查看全部
  • https://img1.sycdn.imooc.com//5afb8cbb0001c9d913660768.jpg

    查看全部
  • https://img1.sycdn.imooc.com//5afb8c7600013dc613660768.jpg

    查看全部
  • https://img1.sycdn.imooc.com//5afb8b0c0001bf1f13660768.jpg

    查看全部
  • mkdirs()可以建立多级文件夹, mkdir()只会建立一级的文件夹, 如下:


    new File("/tmp/one/two/three").mkdirs();

    执行后, 会建立tmp/one/two/three四级目录


    new File("/tmp/one/two/three").mkdir();

    则不会建立任何目录, 因为找不到/tmp/one/two目录, 结果返回false


    查看全部
  • VVe

    5)序列化中  子类和父类构造函数的调用问题

    父类实现了序列化接口:

    其子类都可以进行序列化

    序列化:把关于父类的信息也写入文件,因为用到了子类,所以会递归调用父类的构造方法

    反序列化:因为序列化时已经把关于父类的信息写入文件,所以读取的时候就不再调用父类的构造函数初始化父类的信息。

    子类实现了序列化接口:

    序列化:因为用到了子类,所以会递归调用父类的构造方法,但是不会把关于父类的信息写入文件

    反序列化:读取到的信数据因为没有父类的信息,所以要重新调用父类的构造方法来初始化信息。


    代码:

    public class ObjectSeriaDemo2 {

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

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("demo/obj1.dat"));

    f1 f1=new f1();

    oos.writeObject(f1);

    oos.flush();

    oos.close();

    ObjectInputStream ois=new ObjectInputStream(new FileInputStream("demo/obj1.dat"));

    f1 f2=(f1)ois.readObject();

    System.out.println(f2);

    }

    }

    class f  {

    public f() {

    System.out.println("f");

    }

    }


    class f1 extends f implements Serializable{

    public f1() {

    System.out.println("f1");

    }

    }

    结果:

    f

    f1

    f

    com.imooc.io.f1@776ec8df


    查看全部
  • VVe

    本节目的:了解一下对一些序列化的优化问题

    4) transient关键字

    加了之后不会对transient修饰的属性进行JVM默认的序列化,但是可以自己对该属性另外写方法进行序列化(并不是所有的元素都要进行序列化,可节省空间)

    方法签名:

    private void writeObject(java.io.ObjectOutputStream s)

            throws java.io.IOException

    从ArrayList源码拷贝过来的方法签名,用来对transient关键字修饰的属性进行序列化

    private void readObject(java.io.ObjectInputStream s)

            throws java.io.IOException, ClassNotFoundException

    从ArrayList源码拷贝过来的方法签名,用来对transient关键字修饰的属性进行反序列化

    代码:

    :Student

    用transient修饰的属性:private transient int age;

    private void writeObject(java.io.ObjectOutputStream s)

            throws java.io.IOException{

    s.defaultWriteObject();//把jvm默认能序列化的元素进行序列化

    s.writeInt(age);//把用transient修饰的属性进行序列化

    }

    private void readObject(java.io.ObjectInputStream s)

            throws java.io.IOException, ClassNotFoundException{

    s.defaultReadObject();//把jvm默认能反序列化的元素进行反序列化

    this.age=s.readInt();//把用transient修饰的属性进行反序列化读取

    }

     

    分析ArrayList源码中序列化和反序列化的问题:

    ArrayList源码的底层是对数组的一些方法的包装,这里面的数组也用transient关键字修饰,为的是不让数组中的无效元素进行序列化,从而节省空间,增加效率

    查看全部
  • 3.对象的序列化和反序列化 

    代码解析:

    对象的类:public class Student implements Serializable

    主运行代码:

    String file="demo/obj.dat";

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));

    Student s=new Student(100001,"拉萨市",20);

    oos.writeObject(s);//一次写入一个Object

    oos.flush();

    oos.close();

    ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));

    Student s2=(Student)ois.readObject();//反序列化取出来的类要进行强制类型转换,一次读取一个Object

    System.out.println(s2);

    ois.close();


    查看全部
  • 8)BufferedInputStream/BufferedOutputStream

    这两个流类与其他流类不同是,不管是读取还是写入,都多处了一个缓冲区,等数据凑一个缓冲区的大小的时候才会读取/写入,提高效率

    FileOutputStream-->write()方法一次写入一个字节,相当于一滴一滴的转移

    DataOutputStream-->writeXxx()方法相当于一瓢一瓢的转移

    BufferedOutputStream-->write()方法相当于把水放到一个缸中,等缸满的时候然后在一次性把水全部转移

    用法:

    BufferedInputStream bis=new BufferedInputStream(new FileInputStream(srcFile));

    BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destFile));

    int c;

    while((c=bis.read())!=-1) {

    bos.write(c);

    bos.flush();//刷新缓冲区

    }

    bos.close();

    bis.close();

    文件拷贝可以用四种方法写,1.单字节无缓冲,2.单字节带缓冲,3.字节批处理无缓冲,4.字节批处理带缓冲


    查看全部
    0 采集 收起 来源:字节缓冲流

    2018-05-01

  • 每个中文两个字节

    查看全部
    0 采集 收起 来源:文件的编码

    2018-04-30

  • java中需要手动释放的资源常见的有以下两个:

    1. 流相关资源

      流相关资源一般遵循:

      1)先开后关,先开的输入流,再开的输出流,通过读取输入流写入输出流中,那么应该先关输出流,再关输入流,但是一般关闭输入输出流操作都是在读写完成后的finally中执行的,所以即使先关输入流,再关输出流也不会任何问题,因为读写操作没有进行了。

      2)先关外层,再关内层。如BufferedInputStream包装了一个FileInputStream,那么先

      关BufferedInputStream,再关FileInputStream。但要注意的是由于一般处理流持有节点流引用,处理流都会在自己的close方法中去关闭节点流,因此我们只要关闭外层的处理流即可,如果多此一举的关闭节点流反而会报错。如BufferedInputStream包装了FileInputStream,我们只要关闭BufferedInputStream即可

      3)只关处理流,不关节点流,原因见上述第二条

      流相关文章参考:http://blog.csdn.net/u012250875/article/details/78341874

    2. jdbc相关资源

      Connection,PrepareStatement,ResultSet三个资源。这三个资源的获取顺序是:

      先获得一个jdbc连接对象Connection,再通过连接对象获得一个sql预处理对象PrepareStatement,如果是查询的话最后还会通过PrepareStatement对象获取一个结果集ResultSet对象,关闭顺序与获取顺序正好相反。先关ResultSet,再关PrepareStatement,最后关Connection。


    查看全部
  • first

    查看全部

举报

0/150
提交
取消
课程须知
亲,为了更好的学习本门课程,需要您对二进制的知识有所了解,还要熟悉Java的基本语法和面向对象的知识。
老师告诉你能学到什么?
1、了解文件编码。 2、能够对文件和目录进行管理操作。 3、能够应用字节流和字符流对文件进行读写操作。 4、能够对对象进行序列化和反序列化。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!