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

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰

  • 关于read返回值的问题:

    一开始read返回的是读取的字节数;当把内容都读完后,返回的数为-1

    举个例子:

    例如要读取的文件字节数是100,buf.length为60。

    第一次read返回给bytes的是读取的字节数:大小为数组的长度60;

    第二次read返回给bytes的还是读取的字节数,但大小为剩下的100-60=40了;

    第三次由于到文件末尾,100个字节内容都读完了,read就返回-1给bytes


    综上,文件没读完时,read返回的是读取的字节数;文件读完后,read返回的是-1,用于判断文件是否读取完成。


    查看全部
  • DataOutputStream/DataInputStream 对“流”功能的扩展,可以更加方便的读取int,long,char等类型数据 1.DataOutputStream-- writeInt()/writeDouble()/writeUTF();DataInputStream read方式同DataOutputStream的各个write方法
    查看全部
  • VVe

    字符流的过滤器:

    BufferedReader /BufferWriter   

    跟InputStreamReader/OutputStreamWriter和FileReader/FileWriter类似

    最大的特点是一次能读/写一行,缺点是不能识别空格,需要手动添加空格

    括号里参数可以放InputStreamReader()/OutputStreamWriter() 或者FileReader()/FileWriter(),会有继承他们各自的优缺点

    代码解析:

    BufferedReader br = new BufferedReader(

    new InputStreamReader(

    new FileInputStream("F:\\java\\demo\\BrAndBwDemo.txt")));

    BufferedWriter bw = new BufferedWriter(

    new OutputStreamWriter(

    new FileOutputStream("F:\\java\\demo\\BrAndBwDemo2.txt")));

    //java中有很多其他流类

    PrintWriter pw=new PrintWriter("F:\\java\\demo\\BrAndBwDemo3.txt");

    String s;

    // readLine()方法支持一行一行读取,但是并不能识别空格

    while ((s = br.readLine()) != null) {// 结束标志是readLine()==null

    System.out.println(s);

    bw.write(s);

    bw.newLine();//BufferedReader/BufferedWriter不能识别空格,所以写入要手动添加空格

    bw.flush();

    pw.println(s);

    pw.flush();

    }

    br.close();

    bw.close();

    pw.close();


    查看全部
  • 在java中,为什么input是读取而output是写入?

    输入输出都是针对内存。input,输入到内存。也就是从其他数据源取数据,然后输入到内存。显然这就是读文件到内存。输出同理。

    查看全部
  • VVe
    file类的一些复杂点的常用操作如过滤,遍历等(把这些方法都包装到一个类里面(FileUtils工具类)方便使用) 1.输出指定目录下(包含子目录)的所有文件 1.先判断是否存在还有是否是文件 2.调用listFiles()返回目录下的文件对象数组,然后用foreach方法遍历每一个文件对象,判断文件对象是否是目录,是的话调用本身这个方法(递归),不是的话直接输出文件对象。 public static void ListDiretory(File f) throws IOException { // 为了谨慎起见判断目录是否存在 if (!f.exists()) throw new IllegalArgumentException("该目录" + f + "不存在"); // 为了谨慎起见判断是否是目录 if (!f.isDirectory()) throw new IllegalArgumentException("该文件不是目录"); // String []s=f.list();//这个方法返回一个目录下文件名称的字符串数组 // for (String s1 : s) { // System.out.println(s1); File[] f1 = f.listFiles();//这个方法返回一个目录下的文件数组 if (f1 != null && f1.length > 0) { for (File f2 : f1) {//遍历这个文件数组的每一个文件 if (f2.isDirectory()) {//如果是目录就递归,不是就直接输出(不判断的话递归后会,不是目录的会被当做异常抛出,然后终止程序) System.out.println(f2); ListDiretory(f2); } else { System.out.println(f2); } } } }
    查看全部
    1 采集 收起 来源:遍历目录

    2018-03-22

  • gbk:中文两个字节,英文一个字节 utf-8:中文三个字节,英文一个字节 UTF-16be:中文两个字节,英文两个字节 ASNI:中文机器上默认使用gbk编码,即中文两个字节,英文一个字节。 直接在中文机器上创建的只认识ANSI编码,联、联通刚好符合utf-8编码规则,会自动进行转换成utf-8,所以显示乱码。但是如果是复制过来的文件,中文机器什么编码都认识。
    查看全部
    1 采集 收起 来源:文件的编码

    2018-02-28

  • 1、byte 类型 8 位,int 类型 32 位,为了避免数据转换错误,通过 & 0xff 将高 24 位清零 2、long time = System.currentTimeMillis() 当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量) 3、is.read() 单字节适合读取 小 文件 is.read(byte[] bytes,int star,int size) 字节数组适合读取 大 文件 读取文件最常用的是批量读取int bytes = fis.read(buf, 0 , buf.length); FileInputStream文件输入 单字节输入即不用数组。 /** * 批量读取,对大文件而言效率高,也是我们最常用的读文件的方式 * @Inparam fileName * @throws IOException */ public static void printHexByByteArray(String fileName)throws IOException{ FileInputStream in = new FileInputStream(fileName); byte[] buf = new byte[8 * 1024]; /*从in中批量读取字节,放入到buf这个字节数组中, * 从第0个位置开始放,最多放buf.length个 * 返回的是读到的字节的个数 */ int bytes = in.read(buf,0,buf.length);//一次性读完,说明字节数组足够大 int j = 1; for(int i = 0; i < bytes;i++){ System.out.print(Integer.toHexString(buf[i] & 0xff)+" "); if(j++%10==0){ System.out.println(); } }
    查看全部
  • 斜杠"/":用作分隔符(包括Windows和Linux) 反斜杠"\":只在Windows中作为分隔符,但因为"\"作为转义字符,所以在Java中要用反斜杠作为分隔符的话应使用"\\" File.separator:不同系统通用分隔符 创建File对象: File file = new File("E:/...");//文件/文件夹路径对象 File file = new File("..." ,""...);//父目录绝对路径 + 子目录名称 File file = new File("...","...");//父目录File对象 + 子目录名称 file.exists():判断文件/文件夹是否存在 file.delete():删除文件/文件夹 file.isDirectory():判读是否为目录 file.isFile():判读是否为文件夹 file.mkdir():创建文件夹(仅限一级目录) file.mkdirs():创建多及目录文件夹(包括但不限一级目录) file.createNewFile():创建文件 file.getAbsolutePath():得到文件/文件夹的绝对路径 file.getName():得到文件/文件夹的名字 file.String():同样是得到文件/文件夹的绝对路径等于file.getAbsolutePath() file.getParent():得到父目录的绝对路径 String[] gdir.list():得到目录的子目录\文件的名称(不是绝对路径) File[] dir.listFiles():得到目录的子目录\文件
    查看全部
  • 中文机器上创建的文本文件只能识别ansi编码 如果是由其他地方创建的文本文件 再拷贝出来的则可以识别任意的编码 UTF-8编码 汉字占3个字节 英文占一个 gbk编码 汉字占2个字节 英文占1个 UTF-16be编码是java中的编码 汉字和英文都是占两个字节 .getBytes();将字符串变成byte类型 integer.toHexString();将字节流变成16进制的int类型 用什么编码将字符串变成字节流 就要用同样的编码才能将其变回去 new String(“dd”,"UTF-8");可以自己选择编码方式 缺省则是默认工程属性中默认的编码
    查看全部
    2 采集 收起 来源:文件的编码

    2018-03-22

  • 缓冲字节流这一节希望重新录更正错误,使用缓冲字节流复制确实是最快的方式,但对于小文件10M以下的文件体现不出优势,对于百兆文件正确使用,时间可以控制到50ms内。视频中的缓冲字节流使用有错误,复制文件最快的做法是将批量读取到的字节数组使用缓冲写入到文件,在机器性能范围内字节数组越大越快。在循环写入的过程中不需要使用flush,就像cwt8805说的,缓冲输入流在关闭的时候会将所有缓冲区的数据全部写入文件,使用flush刷新缓冲就失去了缓冲的意义。最后关闭IO流和文件流应该在finally中关闭,否则IO异常时执行不到close语句,IO流仍然没有关闭。
    查看全部
    1 采集 收起 来源:字节缓冲流

    2017-11-20

  • FileInputStream/FileOutputStream 每次一个字节的读写 DataInputStream/DataOutputStream 每次一个类型数据的读写。如:一次写入一个int类型的数据,相当于一次写入四个字节。 BufferedInputStream/BufferedOutputStream 每次读写一个缓冲区大小的数据。每次写入时必须调用实例的flush()方法来清空缓冲区。 读写效率对比:使用字节数组作为缓冲的流 > 使用原生缓冲的流 > 不使用缓冲的流
    查看全部
    1 采集 收起 来源:字节缓冲流

    2018-03-22

  • JAVA I/O输入输出流 三、RandomAccessFile的使用 1、RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件。 2、RandomAccessFile支持随机访问文件,可以访问文件的任意位置 3、Java文件模型:在硬盘上的文件是byte byte byte存储的,是数据的集合 4、打开文件:有两种模式rw读写、r只读 RandomAccessFile raf=new RandomAccessFile(file,"rw"); 文件指针,打开文件时指针在开头pointer=0; 5、写方法 raf.write(int)--->只写一个字节(后8位),同时指针指向下一个位置,准备再次写入 6、读方法 int b=raf.read()----->读一个字节 7、文件读写完成以后一定要关闭(Oracle官方说明) 四、字节流的使用 五、字符流的使用 六、对象的序列化和反序列化
    查看全部
  • JAVA I/O输入输出流 一、编码问题 1、gbk编码中文占用2个字节,英文占用1个字节 2、utf-8编码中文占用3个字节,英文占用一个字节 2、utf-16be 编码中文占用2个字节,英文占用2个字节 3、当你的字节序列是某种编码格式时,这个时候想把字节序列变成字符串,也需要使用这种编码方式,否则会出现乱码 4、文本文件 就是字节序列,可以是任意编码的字节序列,如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码 二、File类的使用 三、RandomAccessFile的使用 四、字节流的使用 五、字符流的使用 六、对象的序列化和反序列化
    查看全部
    1 采集 收起 来源:文件的编码

    2017-08-30

  • 为什么input是读取,output是写入? 开始一直不明白,明明input是入,output是出. 原来是因为程序和运行时数据是在内存中驻留的,而input,output都是相对内存来说的 input是从磁盘读取到内存 , output是从内存写到磁盘.
    查看全部
  • 1.一个类实现类序列化接口,那么他的子类也实现了序列化接口 2.对子类对象进行序列化操作时,父类的构造函数都会被调用,当进行反序列化时,如果父类没有实现序列化接口,则会实现父类的构造函数,反之不会
    查看全部

举报

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

微信扫码,参与3人拼团

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

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