-
file.exists()判断文件存不存在 file.isFile()判断是不是文件 file.mkdir()创建文件 file.ifDirectory()是不是一个目录 file.delect()删除文件 fiel.creatNewFile()创建文件查看全部
-
对应的操作文件的类有那些属性、那些方法,查看一下api就搞定了 需要注意下面的几个细节: 1:构建file对象时对于文件的路径分隔符有三种方式 / \\ file的静态变量(这个最好,适用于多种操作系系统)查看全部
-
1:常用字符集中英文所占使用的字节数(百度一下,所有的字符集相关的情况都能一清二楚——比如:中英文字符,占多少字节,能表示多少个字符,哪国喜欢用) utf-8中, 中文占用3个字节, 英文占用2个字节 gbk中,中文占用2个字节, 英文占用1个字节 utf-16be中, 中文占用2个字节, 英文占用2个字节(java是双字节编码——一个字符占两个字节,一个字符能够放一个汉字,使用GBK、UTF-16BE字符集就行) 2:再次强调 当你的字符序列是某种编码时,这个时候想把字节序列编程字符串,也需要用这种编码方式,否则会出现乱码。这也是出现乱码的根源,字节序列对于人来讲是难以识别的,所以,人只关心将字节序列编程字符串的情况,如果出现了乱码是不能容忍的。 3:在支持中文的操作系统上的机器中新建并编写文本文件比如:联想、联通、联,保存然后打开会发现联想不是乱码其他的是两个是乱码,这是因为:文本文件就是字节序列,可以是任何编码的字节序列,如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ANSI编码。联通、联,这两个字符串是一种巧合,他们正好符合了UTF-8编码的规则。所以,再次打开的时候就出现了乱码。查看全部
-
有关字符编码的知识点,需要注意一下的观点:<br> 1:字符和字节之间可以相互转换——字符对于人来讲比较容易识别,电脑则容易识别字节编码,并且在电脑中字节编码最常用的表现形式有二进制、八进制、十六进制,三种形式,之所以这样表示是因为进制越高表现出来的表示就会更短一些。<br> 2:同样的字符编码集中,中文字符和英文字符所占的字节数是不同的<br> 3:不同的字符编码集中,中文字符和英文字符所占的字节数可想而知格式有一定的差异的,之所以存在这样的差异,是因为中文字符比较多,必须使用更多的字节数才能表达的完全<br> 4:字符属于那个字符编码集,字节也必须属于那个编码集,在这样的情况下字符和字节之间相互转换才不会出现乱码的情况,否则就会出现乱码的情况,这也是乱码出现的更本原因。<br> 5:如果一个字符存在于多个字符编码集中,那么字符所表现的形式是一致的,但是对应的字节的表现形式可能存在一致的情况,不过大多数应该是相差很大的。<br> 6:世界上有各种各样的字符编码集,都是为了自己本地范围的交流制定的,目前也有了统一的字符编码集,能够囊括几乎所有语言的字符,这是一件好事,如果能够统一都是用这种字符编码集的话,乱码问题就不会存在了,编程世界也更加的美好了。查看全部
-
本次可能老师要讲解的内容,这些内容在开发中也一直在使用,不过由于其重要性,还是要再复习一下。查看全部
-
序列化中子父类构造函数问题 1、一个类实现了序列化接口,则其子类可以直接序列化,且构造函数会被递归调用 2、对子类对象进行反序列化操作时,如果其父类没有实现序列化接口那么其父类的构造函数会被调用查看全部
-
arraylist是自己完成序列化的不是用jvm自定义的方式<br> 因为arraylist有扩容机制 所以里面封装的那个数组可能没有放满<br> 所以为了减少开销 只序列化有信息的部分 对于对象中某个属性加上transient关键字可以是起步默认呗自动化,但仍可手动自动化。方法是重写类中的readObject方法与writeObject方法如下: private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ s.defaultWriteObject();//把jvm能序列化的元素自动序列化 s.writeInt(stuAge);//手动将transient元素序列 private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); this.stuAge = s.readInt(); } transient这种做法的作用在于比如说有一个属性是一个数组,但这个数组并没有被占满,未被占满的元素空间就不应该被序列化应该逐个逐个手动序列化,直到将所有被占据的数组空间序列化就结束 transient关键字 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。 2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。 3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。 4)但可以通过writeObject和readObject自己完成序列化和反序列化查看全部
-
对象的序列化就是将对象Object转换为byte序列,反之称为反序列化。ObjectOutputStream即为序列化流,ObjectInputStream是反序列化流,而在对对象序列化时一定要记得实现serializable接口,例如: public class Student implements Serializable ObjectOutputStream的操作方法是writeObject(对象),而ObjectInputStream的操作方法是readObject(),他返回的是一个Object类型,记得需要转化查看全部
-
字符流的过滤器。注意构造方法。。一般我们不使用BufferedWriter.而使用PrinterWriter配合BufferedReader使用。这样更方便查看全部
-
字符流 之字符流的过滤器 除了具有基本的读写单个字外,更具有加强功能,可以一次性的读写一行。可以参见帮助文档,文档中的介绍更加详细,介绍到字符流的顾虑器,优化了一般的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查看全部
-
IO流read()的一个特殊用法查看全部
-
File的遍历查看全部
-
如果父类没有实现序列化接口,那么在读取子类的时候,父类的构造函数就会被调用查看全部
-
transient关键字查看全部
-
对象序列化查看全部
举报
0/150
提交
取消