posts - 0,  comments - 1,  trackbacks - 0
IO
 

Input / Output:指跨越出JVM的边界,与外界数据的源头或者目标数据源进行数据交换.

                    输出 Output

      ------------------------------->

JVM                                           数据源

      <-------------------------------

                    输入   Input

注意:输入/输出是针对JVM 而言。

File

可表示一个文件,也有可能是一个目录(JAVA中文件和目录都属于这个类中,而且区分不是非常的明显,可以调用isDirectory()isFile()来判断)

常用的方法:

       exists()          用来判断 文件或目录是否存在。

       isDirectory()         判断是否是目录

       isFile()                   判断是否是文件

       mkdir()                 创建目录

       mkdirs()         创建目录包括它下面的子目录。

       getAbsolutePath()得到文件绝对路径

       getParentFile() 得到父目录的File对象

       list()               得到文件名的String数组 (得到当前目录下的文件名,目录名)

       listFiles()         返回File类型数组,(目录,文件的File对象)可用getName()得到文件名。

       delete()          删除文件

       getName()            得到文件名

       getPath()              得到文件相对路径

       separtor()             得到文件分隔符 //这个方法有更好的通用性,平台不同结果不同

       deleteOnExit()      在进程退出的时候删除文件,常用在临时文件的删除。

1、流的概念:

              输出流

       程序----------->文件、网络

       程序<-----------数据来源    

              输入流

2、流的分类:

       按处理方式来分:

              字节流:按8位传输 InputStream OutputStream

              字符流:按16位传输 Reader Writer

       按功能来分:

              节点流:与文件、网络打交道的流,操作数据的来源

              处理流(包装流):操作节点流

       如何区分:          

              输入流:以InputStreamReader结尾的流

                            FileInputStream    BufferedReader

              输出流:以OutputStreamWriter结尾的流

                            FileOutputStream PrintWriter

              字节流:以InputStreamOutputStream结尾的流

              字符流:以ReaderWriter结尾的流

              节点流:看构造器,参数为数据来源,参数是StringFile之类的

                            new FileInputStream("d:""abc.txt");

                            new FileOutputStream(new File("d:""abc.txt"))

              处理流:构造器的参数为其它流

                            new BufferedReader(new InputStreamReader(new FileInputStream("d:""abc.txt")));

       选择流时:

              首先确定是输入还是输出。

              其次确定是字节流还是字符流。

              然后确定是节点流还是处理流。

       根据数据类型选择输入/输出流:

              ①bytebyte[]     InputStream / OutputStream

              ②intbytechardouble       DataInputStream / DataOutputStream

              ③charString     Reader / Writer

              ④Object              ObjectInputStream / ObjectOutputStream

              若考虑性能会在前试着加Buffered

3、常用流:

       DataInputStream&DataOutputStream 用于读写基本类型数据,如intfloatlongdoubleboolean等。

       此外,DataInputStreamreadUTF()方法还能读取采用UTF-8字符编码的字符串。

       BufferedInputStream&BufferedOutputStream

       因为利用了缓冲区,所以常用于提高读写数据的效率。

       BufferedInputStream先把一批数据读入到缓冲区,接下来read方法只需要从缓冲区内获得数据,减少了物理性读取数据的次数。

       可以使用BufferedInputStream(InputStream in, int size) 中的size来指定缓冲区的大小

       ObjectOutputStream&ObjectInputStream

       对象的序列化是指把对象写到一个输出流中,

       对象的反序列化是指从一个输入流中读取一个对象。

       Java语言要求只有实现了java.io.Serializable接口的类的对象才能序列化和反序列化

       Reader/Writer

       当需要程序读写文本文件,而且文本文件采用特定的字符编码集时,应采用Reader/Writer

       InputStreamReader & OutputStreamWriter 桥梁流

       把字节流转换成字符流

       在桥转换的时候可以指定编解码方式

       BufferedReader

       readLine()方法可以一次读入一行字符,以字符串形式返回。

       BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("file"),"UTF-8"));

       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file"),"UTF-8"));

       PrintWriter 输出格式化的数据,所有的写数据的方法以print开头。

       print (int i)

       print (long l)

       print (float f)

       print (String s)

       每个print() 方法都有一个println()方法对应

       a.

       printWriter.println("Hello");

       b.

       printWriter.print("Hello");

       printWriter.println();

       c.

       printWriter.print("Hello"n");

       以上三段代码是等价的

4JAVA编码问题:UTF-8,GBKGB2312是可以显示中文的。

       ASCII                    一个字符-----1B    任何一种编码均兼容    A<-->65

       ISO8859-1 (西欧)一个字符-----1B

       GB2312 / GBK      一个字符-----2B

       Unicode         一个字符-----2B    会增加网络负担 Java中的charUnicode

       UTF-8            变长字节(变长的Unicode方式)

                     英文-----1B

                     中文-----3B

       提供编码帮助的类:java.nio.charset.Charset

       GBK---中、日、韩,gb2312GBK的子集

       会出现中文编码问题的情况:

              1、用流操作文件时

              2、网页(动态、静态)

              3、网络传递信息时

       String--->乱码(再次转码)

       String temp=p.getProperty("name");

       temp=new String(temp.getBytes("ISO8859-1"),"GBK");这两处的编码有时需要互换位置

对象序列化

       1:定义:把对象作为一个整体,在I/O流中传播

       2:语法:

       ()实现了Serializeble接口的对象才能可序列化。这个接口里没有任何方法,没有方法的接口称为标记接口。

       例如:class Student implements Serializeble{} 

       ()如果一个序列化后的对象里面有一个属性是个对象属性,那么这个对象属性也需要实现序列化。

       例如:class Student implements Serializeble{

            Teacher t;//必须序列化

              }

              class Teacher implements Serializeble{}

       (3)包名、类名、属性可以被序列化

       方法、构造器不会序列化

       所有的静态属性都不会被序列化

       transient关键字修饰的属性是临时属性,临时属性不参与序列化。

       3:使用注意:

       a.readObject读文件的时候,当文件结束的时候会抛出EOFException,当我们捕获这个异常的时候,程序就结束了。

       b.如果需要向一个文件中追加对象,首先要把文件中原有的对象读出来,再把原有对象和新追加的对象一起写入到文件。      

       c. serialVersionUID是静态常量,表示当前对象的版本号,在接受传输的数据时会自动检查该值,保证版本的相同。

java.util.Properties属性类,针对属性文件操作,早期使用。

       好处是可以在不修改代码的情况下改变相应的需求。

       文件名以.properties结尾的文件称为属性文件

       文件的内容是:名字= 的形式

       常用方法:   

              public void load(InputStream inStream)throws IOException

              从输入流中读取属性列表

              public void store(OutputStream out,String comments)throws IOException

              把属性列表写入输出流

              public String getProperty(String key)

              public String getProperty(String key,String defaultValue)

              public Object setProperty(String key,String value)

posted on 2009-03-29 19:41 雨飞 阅读(59) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 

<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿

文章档案

搜索

  •  

最新评论