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

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 不明白这个 有什么用
    查看全部
  • 我说说我的理解吧: 1.如果字节数组的长度够大,(也就是比源文件的字节大小要大)则一次就能读取完流中的字节数据,此时循环只执行一次... 2.如果字节数组的长度不够大,(也就是比源文件的字节大小要小)则需要几次才能读完,每读取一次,把读取到的字节写入到输出流中,直到全部读写完毕 /* 假设源文件占250个字节,设定的字节数组长度为100 则第一次从输入流中读取100个字节存放到缓冲区的0-100的位置 并将缓冲区0-100位置的字节写入到输出流中。 第二次同样从输入流中读取100个字节存放到缓冲区的0-100的位置,这时会覆盖第一次存放在缓冲区的对应字节 并将缓冲0-100位置的字节存写入到输出流中 第三次从输入流中读取50个字节存放到缓冲区的0-50的位置,会覆盖第二次存放在缓冲区的对应字节 并将缓冲区0-50的字节写入到输出流中 第四次返回值是-1,也就是EOF标志,循环结束,已实现源文件和目标文件的完整复制 */
    查看全部
  • 字符流的过滤器 BufferedReader---->readLine不识别换行符 BufferedWriter/PrintWriter---->write public static void main(String[] args) throws IOException { // 对文件进行读操作,套接流,需要套在节点流上 BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream("F:\\IO流\\Buffered/br.txt"))); // 使用BufferedWriter对文件进行写操作 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( new FileOutputStream("F:\\IO流\\Buffered/bw.txt"))); // 使用PrintWriter对文件进行写操作 PrintWriter pw = new PrintWriter("F:/IO流/Buffered\\pw.txt"); bw.append("我是使用Buffered方法写入的"); pw.append("我是使用Print方法写入的"); String line; while ((line = br.readLine()) != null) { // 一次读一行,并不能识别换行符,输出时可以加上ln System.out.println(line); bw.write(line); // 单独写出换行 bw.newLine(); bw.flush(); pw.println(line); pw.flush(); } br.close(); bw.close(); pw.close(); }
    查看全部
  • InputStreamReader和OutputStreamWriter的使用 public static void main(String[] args) throws IOException { // 读出文件内容 使用默认编码方式,其他编码方式可加在文件路径后面加上用双引号括起来 InputStreamReader isr = new InputStreamReader(new FileInputStream( "F:\\IO流\\IsrAndOsw\\isr.txt"),"gbk"); // 写入文件内容 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( "F:\\IO流\\IsrAndOsw\\osw.txt")); //覆盖写入 osw.write("你好"); //不覆盖写入,加入后面 osw.append("世界"); // 一次读取一个字符 /*int c; while ((c = isr.read()) != -1) { System.out.print((char) c); }*/ char[] buffer = new char[1024]; // 批量读取,放入buffer这个字符数组 while ((isr.read(buffer)) != -1) { osw.write(buffer); osw.flush(); } isr.close(); osw.close(); }
    查看全部
  • FileInputStream批量读取 long start = System.currentTimeMillis();获得系统时间 // 批量读取,对大文件而言效率高,也是我们最常用的读取方式 public static void printHexByByteArray(String fileName) throws IOException { FileInputStream in = new FileInputStream(fileName); byte[] buf = new byte[20 * 1024]; // 从in中批量读取字节,放入到buf这个字节数组中, 从0个位置开始放,最多放buf.length个 返回的是读到的字节的个数 int bytes = in.read(buf, 0, buf.length); // 一次性读完,说明字节数组足够大 int j = 1; for (int i = 0; i < bytes; i++) { if (buf[i] <= 0xf) { System.out.println("0"); } // 将整型b转换成16进制表示的字符串 System.out.print(Integer.toHexString(buf[i]) + " "); if (j++ % 10 == 0) { System.out.println(); } } int bytes2 = 0, k = 1; while ((bytes2 = in.read(buf, 0, buf.length)) != -1) { for (int i = 0; i < bytes2; i++) { // byte类型为8位,int类型32位,为了避免数据转换错误,通过&0Xff将高24位清零 System.out.print(Integer.toHexString(buf[i] & 0xff) + " "); if (k++ % 10 == 0) { System.out.println(); } } } in.close(); }
    查看全部
  • 去这个地址看我的代码: https://github.com/Vickixiaodong/Java-FileListDirectory/tree/master/src/com/sasa test文件夹下是测试方法 utils文件夹下是具体的工具类 主要功能: 输入要查询的文件目录 输出输入目录所有文件,消耗时间以及文件总数 问题讨论:欢迎留言 程序运行截图: 请输入要查询的文件目录: /bin /bin/grep 共消耗了:0.01 ms,共有:1个文件!
    查看全部
    2 采集 收起 来源:遍历目录

    2016-01-22

  • 一、被序列化的對象要實現序列化接口: public class Student implements Serializable{ 二.對象的序列化: public static void main(String[] args) throws Exception{ //序列化后存到這個文件里 String file = "demo/obj.dat"; //1.对象的序列化 ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(file)); Student stu = new Student("10001", "张三", 20); oos.writeObject(stu); oos.flush(); oos.close();
    查看全部
  • public static void main(String[] args) throws IOException{ //对文件进行读写操作 BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream("e:\\javaio\\imooc.txt"))); PrintWriter pw = new PrintWriter("e:\\javaio\\imooc4.txt"); String line ; while((line = br.readLine())!=null){ System.out.println(line);//一次读一行,并不能识别换行 pw.println(line); pw.flush(); } br.close(); pw.close(); }
    查看全部
  • 8)BufferedInputStream&BufferedOutputStream 这两个流类位IO提供了带缓冲区的操作,一般打开文件进行写入 或读取操作时,都会加上缓冲,这种流模式提高了IO的性能 从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中: FileOutputStream--->write()方法相当于一滴一滴地把水“转移”过去 DataOutputStream-->writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去 BufferedOutputStream--->write方法更方便,相当于一飘一瓢先放入桶中,再从桶中倒入到另一个缸中,性能提高了 /** * 进行文件的拷贝,利用带缓冲的字节流 * @param srcFile * @param destFile * @throws IOException */ public static void copyFileByBuffer(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在"); } if(!srcFile.isFile()){ throw new IllegalArgumentException(srcFile+"不是文件"); } 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();//刷新缓冲区 } bis.close(); bos.close(); }
    查看全部
    2 采集 收起 来源:字节缓冲流

    2018-03-22

  • 字节流处理
    查看全部
  • 编码问题 1.gbk编码中一个中文汉字两个字节,一个英文一个字节。 2.utf-8编码中一个中文汉字占3个字节,一个英文一个字节.eclipse中默认是gbk编码。 3.utf-16beb编码中一个中文汉字和英文都是占用两个字节。 4.java中一个字符占两个字节,所以可以放入一个中文汉字。因为默认的gbk汉字占用两个字节。 5.java是双字节编码utf-16be 6.在使用中文编译器编写中文文档时,默认使用ANSI编码表,复制粘贴时会自动转换成对应的编码表。 7.用什么编码表编写的字符串,就要用什么编码表读取,否则会出现乱码。
    查看全部
    2 采集 收起 来源:文件的编码

    2015-10-04

  • 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();
    查看全部
  • java是双字节编码(utf-16be): 中文两个字节 英文两个字节; GBK:中文占两个字节,英文1个字节; utf-8:中文占三个字节,英文占1个字节。 中文系统下:ANSI编码代表GBK编码。 文本文件就是字节序列, 可以是任意编码的字节序列
    查看全部
    2 采集 收起 来源:文件的编码

    2015-08-21

  • 好东西
    查看全部
  • UTF8编码下,一个中文占3个字节,英文占1个字节。 GBK编码下,一个中文站2个字节,英文占1个字节。 java是双字节编码utf-16be 该编码中文和英文都是2个字节 当字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码 文本文件可以是任意编码的字节序列 如果在中文机器上直接创建文本文件,那么该文本文件只认识ANSI编码 中文系统下,ANSI编码代表GBK编码
    查看全部
    2 采集 收起 来源:文件的编码

    2015-07-13

举报

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

微信扫码,参与3人拼团

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

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