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

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • Java.IO.File类表示文件或目录,只用于表示文件或目录得信息,不能用于文件的访问。
    常用的API:
    1.创建File对象:File file=new File(String path);注意:File.seperater();获取系统分隔符,(所有的系统都认识该分隔符)

    2.boolean file.exists();是否存在.
    3.file.mkdir();创建目录;file.mkdirs();创建多级目录。
    4.file.isDirectory()判断是否是目录;  file.isFile()判断是否是文件。
    5.file.delete();删除文件或目录。
    6.file.createNewFile();创建新文件。
    7.file.getName()获取文件名称或目录的名字。
    8.file.getAbsolutePath()获取绝对路径。
    9.file.getParent();获取父级绝对路径。
    10.file.getSize();获取文件大小。
    11.file.getFormat();获取文件格式名。

    查看全部
  • file.createNewFile(),创建文件

    file.mkdir(),创建文件夹

    RandomAccessFile类
    RandomAccessFile类 是java提供的对文件内容的访问,即可以读取文件,也可以写文件。

    RandomAccessFile类支持随机访问文件,可以访问文件的任意位置

    ********RandomAccessFile类实现步骤
    (1)java文件的模型
    在硬盘上的文件是byte byte byte 存储的,是数据的集合
    (2)打开文件
    有两种模式“rw”(读写) “r”(只读)
    RandomAccessFile raf = new RandomAccessFile(new File("路径"),"rw");
    文件指针,打开文件时指针在开头 pointer = 0;
    (3)写方法
    raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
    (4)读方法
    int b = raf.read()--->读一个字节
    (5)关闭流
    文件读写完成以后一定要关闭流(Oracle官方说明)

    ****************RandomAccessFile 类的方法

    raf.getFilePointer();--->获取指针的位置

    //迅雷实现下载功能,多个进程同时下载一个文件的不同位置,然后将下载后的文件拼接在一起

    raf.writeInt(i);//写入一个int
    //writeInt()方法的内置代码
    raf.write(i>>>24);//高八位向右移动三位
    raf.write(i>>>16);
    raf.write(i>>>8);
    raf.write(i>>>0);

    //中文两个字节,字母两个字节,int八个字节

    读文件时,必须把指针移动到头部
    raf.seek(0);//移动指针到index的位置

    raf.length();返回的是lang

    //一次性读取,把文件中的内容都读取到字节数组中
    byte[] buf = new byte[(int)raf。length()]
    raf.read(buf);
    //变成字符串,装入数组中进行输出
    Arrays.toString(buf);
    for(byte b : buf){
    //以16进制进行输出
    Integer.toHexString(b&0xff)+"";

    raf.close();

    raf.getFilePointer()获取当前指针位置
    raf.length()获取文件长度
    raf.seek()把指针指定到某一位置

    查看全部
  • String s="慕课ABC";
    byte[] bytes1=s.getBytes();//这是把字符串转换成字符数组,转换成的字节序列用的是项目默认的编码
    for(byte b: bytes1)
    System.out.println(Integer.toHexString(b & 0xff)+" ");// & 0xff是为了把前面的24个0去掉只留下后八位
    //toHexString这个函数是把字节(转换成了Int)以16进制的方式显示

    byte[] bytes1=s.getBytes("gbk");//也可以转换成指定的编码

    gbk编码: 中文占用两个字节,英文占用一个字节
    utf-8编码:中文占用三个字节,英文占用一个字节
    java是双字节编码,是utf-16be编码
    utf-16be编码:中文占用两个字节,英文占用两个字节

    当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码

    String str1=new String(bytes4);//这时会使用项目默认的编码来转换,可能出现乱码
    要使用字节序列的编码来进行转换
    String str2=new String(bytes4,"utf-16be");这时会使用utf-16be来编码

    文本文件就是字节序列,可以是任意编码的字节序列
    如果我们在中文机器上直接创建文本文件,那么该文件只认识ANSI编码(例如直接在电脑中创建文本文件)


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

    2018-06-01

  • public String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
    exists()方法用于判断文件或目录是否存在
    file.list() 返回的是 字符串数组 直接子的名称,不包含子目录下的内容
    file.listFiles() 返回当前目录下的所有子目录和文件的文件数组名称
    ========================================

    import java.io.File;
    import java.io.IOException;

    // 列出file类的一些常用操作,不如过滤、遍历等操作
    public class FileUtils {
    public static void listDirectory(File dir) throws IOException{
    // exists()方法用于判断文件或目录是否存在
    if(!dir.exists()){
    throw new IllegalArgumentException("目录:" + dir + "不存在");
    }
    // isDirectory()方法用于判断File类的对象是否是目录
    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(); // 返回的是直接子目录(文件)的抽象
    //for (File file : files) {
    //System.out.println(file);
    if(files!=null && files.length > 0){
    for (File file : files) {
    if(file.isDirectory()){
    // 递归
    listDirectory(file);
    }else{
    System.out.println(file);
    }
    }
    }
    }
    }

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

    2018-06-01

  • Java.IO.File类表示文件或目录,只用于表示文件或目录得信息,不能用于文件的访问。
    常用的API:
    1.创建File对象:File file=new File(String path);注意:File.seperater();获取系统分隔符,如:”\“.
    2.boolean file.exists();是否存在.
    3.file.mkdir();或者file.mkdirs();创建目录或多级目录。
    4.file.isDirectory()或者file.isFile()判断是否是目录或者是否是文件。
    5.file.delete();删除文件或目录。
    6.file.createNewFile();创建新文件。
    7.file.getName()获取文件名称或目录的名字。
    8.file.getAbsolutePath()获取绝对路径。
    9.file.getParent();获取父级绝对路径。
    10.file.getSize();获取文件大小。
    11.file.getFormat();获取文件格式名。

    查看全部
  • String s="慕课ABC";
    byte[] bytes1=s.getBytes();//这是把字符串转换成字符数组,转换成的字节序列用的是项目默认的编码
    for(byte b: bytes1)
    System.out.println(Integer.toHexString(b & 0xff)+" ");// & 0xff是为了把前面的24个0去掉只留下后八位
    //toHexString这个函数是把字节(转换成了Int)以16进制的方式显示

    byte[] bytes1=s.getBytes("gbk");//也可以转换成指定的编码

    gbk编码: 中文占用两个字节,英文占用一个字节
    utf-8编码:中文占用三个字节,英文占用一个字节
    java是双字节编码,是utf-16be编码
    utf-16be编码:中文占用两个字节,英文占用两个字节

    当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码

    String str1=new String(bytes4);//这时会使用项目默认的编码来转换,可能出现乱码
    要使用字节序列的编码来进行转换
    String str2=new String(bytes4,"utf-16be");这时会使用utf-16be来编码

    文本文件就是字节序列,可以是任意编码的字节序列
    如果我们在中文机器上直接创建文本文件,那么该文件只认识ANSI编码(例如直接在电脑中创建文本文件)

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

    2018-06-01

  • 父类没有实现序列化接口,那么在反序列化时就会调用父类的构造函数。

    查看全部
  • file.createNewFile(),创建文件

    file.mkdir(),创建文件夹

    查看全部
  • 4)transient关键字

    private void writeObject(java.io.ObjectOutputStream s)

            throws java.io.IOException{ }

    private void readObject(java.io.ObjectInputStream s)

            throws java.io.IOException, ClassNotFoundException{ }

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


    查看全部
  • 序列化和反序列话是基于二进制流的,序列话便是把Student对象的信息以二进制存储在文件obj.bat中,用文本编辑器打开自然是乱码。只有通过反序列话才能将存储的二进制读取出来,然后显示在控制台上。

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

    1)对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化

    2)序列化流(ObjectOutputStream),是过滤流---writeObject

         反序列化流(ObjectInputStream)---readObject


    3)序列化接口(Serializable)

     对象必须实现序列化接口,才能进行序列化,否则将出现异常

     这个接口,没有任何方法,只是一个标准


    查看全部
  • 字符流的过滤器:

     BufferedReader --->readLine 一次读一行

    BufferedWriter/PrintWriter --->写一行


    查看全部
  • 2.字符流

    1)编码问题

    2)认识文本和文本文件

    Java的文本(char)是16位无符号整数,是字符的Unicode编码(双字节编码)

    文件是byte byte byte ...的数据序列

    文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结构

    3)字符流(Reader  Writer)

    字符的处理,一次处理一个字符

    字符的底层仍然是基本的字节序列

    字符流的基本实现

       InputStreamReader 完成byte流解析为char流,按照编码解析

       OutputStreamWriter 提供char流到byte流,按照编码处理


    查看全部
  • 8)BufferedInputStream  &  BufferedOutputStream

    这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能

    从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中:

    FileOutputStream--->write()方法相当于一滴一滴地把水“转移”过去

    DataOutputStream--->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去

    BufferedOutputStream--->write方法更方便,相当于一瓢一瓢先放入桶中,在从桶中倒入到另一个缸中,性能提高了。

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

    2018-05-30

  • 7)DataOutputStream/DataInputStream  

    对“流”功能的扩展,可以更加方面的读取int,long,字符等类型数据

    DataOutputStream

       writeInt()/writeDouble()/writeUTF()


    查看全部

举报

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

微信扫码,参与3人拼团

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

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