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

文件传输基础——Java IO流

难度入门
时长 2小时 0分
学习人数
综合评分9.67
669人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 文件路径分隔符
    查看全部
  • java通过RandomAccessFile类实现对文件的访问(访问文件的方式有两种:读写和只读)。 java的文件:在硬盘上文件是以字节的形式存储的。文件中的字,字母和数字都是按字节形式存储的。
    查看全部
  • java中,使用java.io.File类用来表示文件或目录,但是File类不提供访问文件的功能。
    查看全部
  • java中jbk编码,中文汉字占用2个字节,英文字母和数字占用1个字节。 在utf-8编码中中文汉字占用3个字节,英文字母和数字一样占用1个字节。 java是双字节编码,编码格式是utf-16be。在utf-16be编码中,汉字,英文字母和数字都是占用两个字节的。比如String str= "慕课sfdsa123";java会给str中的每一个字符都分配2个字节,‘幕’和‘课’就会将这两个字节用完,而英文字母和数字高字节为0,低字节就是字母或数字的编码了。
    查看全部
    0 采集 收起 来源:文件的编码

    2018-03-22

  • (5)序列化中子类和父类构造函数的调用问题 一个类实现了序列化接口,则其子类可以直接序列化,且构造函数会被递归调用 对子类对象进行反序列化操作时,其父类没有实现序列化接口,则其父类的构造函数会直接被调用。 理解一下,是这样的: 子类继承了分类的属性和方法,于是在声明子类时,从父类那里继承来的属性和方法,如果不需要改写的话,也就不需要再写出来。而这些从父类哪里继承来的属性和方法,的厨师话,是由父类的构造函数完成的。正常情况下,一旦创建一个子类对象,就会调用其父类的构造函数初始化子类从父类那里继承来的属性。 序列化操作会把一个对象的相关属性写进一个文件中,反序列化则是从一个文件中把一个对象的属性读出来,还原一个对象,其效果是出现了一个对象。而一旦出现了一个对象就是需要调用相关的构造函数。如果说,父类实现了序列化接口,=则子类从父类哪里继承来的属性也会序列化到文件里,反序列化时会一起读出来,但是如果父类没有实现序列化接口,那么子类对象序列化到一个文件中后,再次反序列化时,子类对象从父类哪里继承来的属性的值,必须要使用父类的构造函数,重新构造出来。想想也能认可,这样做是很合理的。
    查看全部
  • transient 关键字<br> private transient int stuage;<br> 关键字之后jvm就不会再去默认的序列化 stuage 属性,但并不是说就不能序列化了,这时可以手动的序列化<br> //手动实现序列化<br> private void writeObject(java.io.ObjectOutputStream s)<br> throws java.io.IOException<br> {<br> s.defaultWriteObject(); //能默认序列化 的 就先默认序列化<br> s.writeInt(stuage); //序列化一个用transient修饰的属性<br> }<br> //手动实现反序列化<br> private void readObject(java.io.ObjectInputStream s)<br> throws java.io.IOException, ClassNotFoundException<br> {<br> s.defaultReadObject(); //把虚拟机能默认的放序列化元素反序列化<br> this.stuage = s.readInt(); //手动完成 stuage (被transient修饰的属性)<br> <br> }<br> 上面的方签名是记不住,可以随便写一个实现了上面方法的类,比如ArrayList,选中之,F3即可查看源码,ctrl F 即可查找到,复制出来就能直接使用 是不是努着没事找事,明明可以默认序列化,为什么还要手动序列化,倒弄一圈这不是自找麻烦吗,使用Student这个例子是看不出来的,最好还是打开ArrayList的源码来看看。 ArrayList中疯转了对数组的操作,其内部就是有一个数组,数组里面是可以有很多的元素的,一个数组,即便是没有存满元素,但是每一个数组元素也会有一个默认的值。如果使用jvm的默认序列化的话,这样将会把数组中那些带有默认值的元素也一块序列化,这样不是就浪费了。如果可以自己手动序列化的话,我就可以有选择的型的序列化,只把数组中存储的元素序列化,别的空数组元素则不需要序列化。
    查看全部
  • public void list (String path){ File file = new File(path); File[] list = file.listFiles(); for(File i :list){ if(i.isFile()){ System.out.println(i); }else { String path1 = i.getAbsolutePath(); list(path1); } } } /** *列出所有文件 */ public static void filter (String path){ IOTest ioTest = new IOTest(); File file = new File(path); if(!file.isDirectory()&&!file.isFile()) { System.out.println("您输入的不是一个正确的路径"); return; }else if(file.isFile()){ System.out.println("您输入的是一个文件路径,文件地址"+file); }else if(file.isDirectory()){ System.out.println("您输入的是一个目录路径,该目录下的所有文件地址如下"); ioTest.list(path); } }
    查看全部
    0 采集 收起 来源:遍历目录

    2018-03-22

  • 一定要注意了 要尽心序列化的对象的类 必须实现Serializable借口 就应当向下面这样 class Student implements Serializable { } 其实序列化,就是把一个对象的各个属性,写入到文件中,写入文件中,就是以字节的形式存储。 String file = "demo/obj.dat"; //相对路径下可以使用单鞋干 /* ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(file)); Student stu = new Student("10001", "张三", 20); oos.writeObject(stu); oos.flush(); oos.close();*/ //通过反序列化 把序列化后的对象读出 ObjectInputStream ois = new ObjectInputStream( new FileInputStream(file)); Student stu = (Student) ois.readObject(); System.out.println(stu); ois.close();
    查看全部
  • 3、对象的序列化的放序列化
    查看全部
  • 字符流 之字符流的过滤器 除了具有基本的读写单个字外,更具有加强功能,可以一次性的读写一行。可以参见帮助文档,文档中的介绍更加详细,介绍到字符流的顾虑器,优化了一般的Reader的巨大开销。<br> Bufferedreader-->readLine()<br> BufferedWriter/PrintWriter 可以实现一次写一行 /**其构造需要双层的嵌套 * 看看下面是一个多么恶心的嵌套,FileReader 是对一个 Reader 进行过滤 所以,构造式需要传进来一个Reader,(我们知道Reader是一个抽象类,我们只能使用起实现子类) * 我们有知道,用的是Reader的实现子类 InputStreamReader,而InputStreamReader它有需要一个InputStream,我们最常用的 * InputStream的实现子类是FileInputStream,因为我们这里也是对文件进行操作 */ BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream("e:\\Jworkspace\\code.txt"))); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( new FileOutputStream("e:\\Jworkspace\\code2.txt"))); String line; while((line = br.readline())!=null) //一次读一行 { System.out.println(line); //一次读一行不支持换行, 必须使用println bw.write(line); //必须要单独写出黄航 bw.newLine(); bw.flush(); } br.close(); bw.close
    查看全部
  • FileReader / FileWriter 专用对文件字符流的操作,无需进行 嵌套构造 FileReader fr = new FileReader ("目录/路径"); FileWriter fw = new FileWriter ("目录 / 路径", true ); //加上true参数表示追加 虽然不需要嵌套构造,但是不能指定读取文件的编码方式,其限制是 只能读取和项目编码相同的文件。如果非要指定读取文件的编码方式,只能使用 嵌套构造的方式。
    查看全部
  • I/O字节流功能总结 批量最快即 byte[] buf=new byte(8*1024); int b; b=in.read(buf.0.buf.length)
    查看全部
    0 采集 收起 来源:字节缓冲流

    2015-11-08

  • 怎么说呢 InputStreamReader的创建需要有一个InpuStream型的路径,这个再创建InputStreamReader时是可以看到eclipse的提醒,但是通常我们都是操作一些文本文件,所以从门就先创建一个 FileInputStream in = new FileInputStream("路径字符串")<br> <br> FileInputStream in = new FileInputStream("e:\\Jworkspace\\bigNum.txt");<br> InputStreamReader isr = new InputStreamReader(in ,"gbk"); //创建 Reader实例并指定编码方式 默认为 gbk 因为 现在工作空间的编码 方式就是 gbk 别忘了 类比着 学习 当然也可以使用 批量读取 的方式 char[] buffer = new char[8*1024]; int c; //批量读取,放入buffer数组,从第0个位置开始,返回的是读到的字符的个数给c whiole((c = isr.read(buffer, 0, buffer.length))!=-1) //这里就是前面的类推 { String s = new String("buffer, 0, c); //转化为一个字符串 }
    查看全部
  • 2、字符流 1)编码问题 前已述及 起码有一点要非常清楚的是,一切进入计算机的都会变成字节码 2)认识文本和文本文件 java中的文本(其实就是char)16位的无符号整数,是字符的unicode编码(这是一种双自己编码) 文件是byte byte byte...的数据集合,可以缩句来理解 文件输数据集合。字节流的编码方式和序列化规则不一样就形成了不同的文件:文本文件,音频文件,视频文件等 文本文件是文本(char的编码)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的数据存储集合 (3)字符流 抽象类 Reader Writer 二者实现了数据的两种相互转换,存储时我们用字节码的形式存储,读入计算机内存处理(包括显示,运算等)是用字符(ABC...)的形式。 字符的处理,一次处理一个字符。其底层仍然是基本的字节序列 字符流的基本实现 InputStreamReader 完成byte流解析为char流,按照编码接卸 OutputStreamWriter 提供char流到byte流,按照编码处理。 为什么上面特别说明了一下文本文件,因为字符流大部分操作的都是文本文件。毕竟文本文编,以编码的方式不容易认读,我们才把字符编码解析为字符。如果Reader一个MP3之类的音频文件,根本就没有什么意义,因为,声音本来就不是用来看的,所以说字符流主要是用于处理文本文件的
    查看全部
  • 一切的数据在计算机的存储中都是,数字,都是字节码,原始的是二进制的,当然你可以读出来十六进制的
    查看全部
    0 采集 收起 来源:字节缓冲流

    2015-11-08

举报

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

微信扫码,参与3人拼团

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

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